package service import ( "context" "service.xpcool.com/internal/model/dto" ) type IUserAuth interface { Login(context.Context, dto.UserLoginInput) (*dto.TokenPair, uint64, error) Refresh(context.Context, string) (*dto.TokenPair, uint64, error) } type IAdminAuth interface { Login(context.Context, dto.AdminLoginInput) (*dto.TokenPair, uint64, error) HasPermission(context.Context, uint64, string) (bool, error) } type AuditEvent struct { AdminID uint64 Permission, Method, Path, IP, Param string DurationMS, StatusCode int } type IAdminAudit interface { Record(context.Context, AuditEvent) } var ( localUserAuth IUserAuth localAdminAuth IAdminAuth localAdminAudit IAdminAudit ) func UserAuth() IUserAuth { if localUserAuth == nil { panic("UserAuth implementation not registered") } return localUserAuth } func RegisterUserAuth(i IUserAuth) { localUserAuth = i } func AdminAuth() IAdminAuth { if localAdminAuth == nil { panic("AdminAuth implementation not registered") } return localAdminAuth } func RegisterAdminAuth(i IAdminAuth) { localAdminAuth = i } func AdminAudit() IAdminAudit { if localAdminAudit == nil { panic("AdminAudit implementation not registered") } return localAdminAudit } func RegisterAdminAudit(i IAdminAudit) { localAdminAudit = i }