优化结构

This commit is contained in:
Yvan
2026-08-22 12:13:16 +08:00
parent d987244d0e
commit b27a66e9d3
200 changed files with 1794 additions and 1715 deletions
+5 -6
View File
@@ -2,13 +2,12 @@ package service
import (
"context"
"kra/internal/biz"
"kra/internal/biz/system"
)
type AccessControlService struct{ uc *biz.AccessControlUsecase }
type AccessControlService struct{ uc *system.AccessControlUsecase }
func NewAccessControlService(uc *biz.AccessControlUsecase) *AccessControlService {
func NewAccessControlService(uc *system.AccessControlUsecase) *AccessControlService {
return &AccessControlService{uc: uc}
}
@@ -16,7 +15,7 @@ func (s *AccessControlService) Authorize(ctx context.Context, authorityID uint,
return s.uc.Authorize(ctx, authorityID, path, method)
}
func (s *AccessControlService) ResolveDataScope(ctx context.Context, authorityID, userID uint) (biz.DataScope, error) {
func (s *AccessControlService) ResolveDataScope(ctx context.Context, authorityID, userID uint) (system.DataScope, error) {
return s.uc.ResolveDataScope(ctx, authorityID, userID)
}
@@ -25,5 +24,5 @@ func (s *AccessControlService) ContextWithDataScope(ctx context.Context, authori
if err != nil {
return ctx, err
}
return biz.NewDataScopeContext(ctx, scope), nil
return system.NewDataScopeContext(ctx, scope), nil
}
+7 -7
View File
@@ -3,9 +3,9 @@ package service
import (
"context"
"encoding/json"
"kra/internal/biz/system"
"time"
"kra/internal/biz"
"kra/internal/service/dto"
)
@@ -17,18 +17,18 @@ type AnnouncementInput struct {
Attachments json.RawMessage
}
type AnnouncementService struct{ uc *biz.AnnouncementUsecase }
type AnnouncementService struct{ uc *system.AnnouncementUsecase }
func NewAnnouncementService(uc *biz.AnnouncementUsecase) *AnnouncementService {
func NewAnnouncementService(uc *system.AnnouncementUsecase) *AnnouncementService {
return &AnnouncementService{uc: uc}
}
func announcementDTO(item *biz.Announcement) *dto.AnnouncementResponse {
func announcementDTO(item *system.Announcement) *dto.AnnouncementResponse {
return &dto.AnnouncementResponse{ID: item.ID, CreatedAt: item.CreatedAt, UpdatedAt: item.UpdatedAt, DeletedAt: nil, Title: item.Title, Content: item.Content, UserID: item.UserID, Attachments: json.RawMessage(item.Attachments)}
}
func announcementDO(in AnnouncementInput) *biz.Announcement {
return &biz.Announcement{ID: in.ID, Title: in.Title, Content: in.Content, UserID: in.UserID, Attachments: in.Attachments}
func announcementDO(in AnnouncementInput) *system.Announcement {
return &system.Announcement{ID: in.ID, Title: in.Title, Content: in.Content, UserID: in.UserID, Attachments: in.Attachments}
}
func (s *AnnouncementService) Create(ctx context.Context, in AnnouncementInput) error {
@@ -56,7 +56,7 @@ func (s *AnnouncementService) Find(ctx context.Context, id string) (*dto.Announc
}
func (s *AnnouncementService) List(ctx context.Context, page, pageSize int, start, end *time.Time) ([]*dto.AnnouncementResponse, int64, error) {
items, total, err := s.uc.List(ctx, biz.AnnouncementFilter{Page: page, PageSize: pageSize, StartCreatedAt: start, EndCreatedAt: end})
items, total, err := s.uc.List(ctx, system.AnnouncementFilter{Page: page, PageSize: pageSize, StartCreatedAt: start, EndCreatedAt: end})
if err != nil {
return nil, 0, err
}
+17 -17
View File
@@ -2,18 +2,18 @@ package service
import (
"context"
"kra/internal/biz/system"
"strings"
"kra/internal/biz"
"kra/internal/service/dto"
)
type APIService struct {
uc *biz.APIUsecase
settings biz.RuntimeSettings
uc *system.APIUsecase
settings system.RuntimeSettings
}
func NewAPIService(uc *biz.APIUsecase, settings biz.RuntimeSettings) *APIService {
func NewAPIService(uc *system.APIUsecase, settings system.RuntimeSettings) *APIService {
return &APIService{uc: uc, settings: settings}
}
@@ -24,15 +24,15 @@ func (s *APIService) NormalizeRoutePath(path string) string {
return NormalizeRoutePath(path, s.settings.RouterPrefix())
}
func (s *APIService) apiDomain(value *dto.APIRequest) *biz.API {
return &biz.API{ID: value.ID, Path: s.NormalizeRoutePath(value.Path), Description: value.Description, APIGroup: value.APIGroup, Method: value.Method}
func (s *APIService) apiDomain(value *dto.APIRequest) *system.API {
return &system.API{ID: value.ID, Path: s.NormalizeRoutePath(value.Path), Description: value.Description, APIGroup: value.APIGroup, Method: value.Method}
}
func apiResponse(value *biz.API) *dto.APIResponse {
func apiResponse(value *system.API) *dto.APIResponse {
return &dto.APIResponse{ID: value.ID, CreatedAt: value.CreatedAt, UpdatedAt: value.UpdatedAt, DeletedAt: nil, Path: value.Path, Description: value.Description, APIGroup: value.APIGroup, Method: value.Method}
}
func apiResponses(items []*biz.API) []*dto.APIResponse {
func apiResponses(items []*system.API) []*dto.APIResponse {
out := make([]*dto.APIResponse, 0, len(items))
for _, item := range items {
out = append(out, apiResponse(item))
@@ -41,7 +41,7 @@ func apiResponses(items []*biz.API) []*dto.APIResponse {
}
func (s *APIService) ListAPI(ctx context.Context, req *dto.APIListRequest) ([]*dto.APIResponse, int64, error) {
items, total, err := s.uc.ListAPIs(ctx, req.Page, req.PageSize, &biz.API{Path: req.Path, Description: req.Description, APIGroup: req.APIGroup, Method: req.Method, OrderKey: req.OrderKey, Desc: req.Desc})
items, total, err := s.uc.ListAPIs(ctx, req.Page, req.PageSize, &system.API{Path: req.Path, Description: req.Description, APIGroup: req.APIGroup, Method: req.Method, OrderKey: req.OrderKey, Desc: req.Desc})
if err != nil {
return nil, 0, err
}
@@ -49,7 +49,7 @@ func (s *APIService) ListAPI(ctx context.Context, req *dto.APIListRequest) ([]*d
}
func (s *APIService) AllAPI(ctx context.Context, strict bool) ([]*dto.APIResponse, error) {
items, _, err := s.uc.ListAPIs(ctx, 0, 0, &biz.API{StrictAll: strict})
items, _, err := s.uc.ListAPIs(ctx, 0, 0, &system.API{StrictAll: strict})
if err != nil {
return nil, err
}
@@ -60,7 +60,7 @@ func (s *APIService) Groups(ctx context.Context) ([]string, map[string]string, e
// The compatible group endpoint uses an unqualified Find, whose natural order is
// the primary-key ascending order. GetAllApis intentionally uses id DESC,
// so do not reuse it here or the group/dropdown order changes.
items, _, err := s.uc.ListAPIs(ctx, 0, 0, &biz.API{OrderKey: "id"})
items, _, err := s.uc.ListAPIs(ctx, 0, 0, &system.API{OrderKey: "id"})
if err != nil {
return nil, nil, err
}
@@ -98,8 +98,8 @@ func (s *APIService) FindAPIResponse(ctx context.Context, id uint) (*dto.APIResp
return apiResponse(value), nil
}
func (s *APIService) ApplyAPISyncRequest(ctx context.Context, req *dto.ApplyAPISyncRequest) error {
added := make([]*biz.API, 0, len(req.NewAPIs))
deleted := make([]*biz.API, 0, len(req.DeleteAPIs))
added := make([]*system.API, 0, len(req.NewAPIs))
deleted := make([]*system.API, 0, len(req.DeleteAPIs))
for i := range req.NewAPIs {
added = append(added, s.apiDomain(&req.NewAPIs[i]))
}
@@ -109,9 +109,9 @@ func (s *APIService) ApplyAPISyncRequest(ctx context.Context, req *dto.ApplyAPIS
return s.uc.ApplyAPISync(ctx, added, deleted)
}
func (s *APIService) SetPolicyPathsRequest(ctx context.Context, req *dto.SetPolicyPathsRequest) error {
paths := make([]*biz.API, 0, len(req.Infos))
paths := make([]*system.API, 0, len(req.Infos))
for _, value := range req.Infos {
paths = append(paths, &biz.API{Path: value.Path, Method: value.Method})
paths = append(paths, &system.API{Path: value.Path, Method: value.Method})
}
return s.uc.SetPolicyPaths(ctx, req.AuthorityID, paths)
}
@@ -130,7 +130,7 @@ func (s *APIService) PolicyPathResponses(ctx context.Context, authorityID uint)
return out, nil
}
func (s *APIService) SyncAPIResponses(ctx context.Context, routes []dto.APIRequest) (*dto.APISyncResponse, error) {
items := make([]*biz.API, 0, len(routes))
items := make([]*system.API, 0, len(routes))
for i := range routes {
routes[i].Path = s.NormalizeRoutePath(routes[i].Path)
// The compatible sync endpoint compares Gin's route table directly, so newly
@@ -156,7 +156,7 @@ func (s *APIService) SetAPIRoles(ctx context.Context, path, method string, ids [
func (s *APIService) FreshCasbin(ctx context.Context) error {
return s.uc.FreshCasbin(ctx)
}
func (s *APIService) SyncAPIs(ctx context.Context, routes []*biz.API) (*dto.APISyncResponse, error) {
func (s *APIService) SyncAPIs(ctx context.Context, routes []*system.API) (*dto.APISyncResponse, error) {
diff, err := s.uc.SyncAPIs(ctx, routes)
if err != nil {
return nil, err
+6 -6
View File
@@ -2,22 +2,22 @@ package service
import (
"context"
"kra/internal/biz/system"
"time"
"kra/internal/biz"
"kra/internal/service/dto"
)
type TokenService struct {
uc *biz.TokenUsecase
issuer biz.TokenIssuer
uc *system.TokenUsecase
issuer system.TokenIssuer
}
func NewTokenService(uc *biz.TokenUsecase, issuer biz.TokenIssuer) *TokenService {
func NewTokenService(uc *system.TokenUsecase, issuer system.TokenIssuer) *TokenService {
return &TokenService{uc: uc, issuer: issuer}
}
func tokenDTO(v *biz.APIToken) *dto.APITokenResponse {
func tokenDTO(v *system.APIToken) *dto.APITokenResponse {
var user *dto.UserResponse
if v.User != nil {
user = convertUser(v.User)
@@ -34,7 +34,7 @@ func (s *TokenService) CreateAPIToken(ctx context.Context, userID, authorityID u
if err != nil {
return "", err
}
record := &biz.APIToken{UserID: userID, AuthorityID: authorityID, Token: issued.Value, Status: true, ExpiresAt: time.Now().Add(duration), Remark: remark}
record := &system.APIToken{UserID: userID, AuthorityID: authorityID, Token: issued.Value, Status: true, ExpiresAt: time.Now().Add(duration), Remark: remark}
if err = s.uc.CreateAPIToken(ctx, record); err != nil {
return "", err
}
+20 -20
View File
@@ -2,36 +2,36 @@ package service
import (
"context"
"kra/internal/biz/system"
"kra/internal/biz"
"kra/internal/service/dto"
)
type AuditService struct{ uc *biz.AuditUsecase }
type AuditService struct{ uc *system.AuditUsecase }
func NewAuditService(uc *biz.AuditUsecase) *AuditService { return &AuditService{uc: uc} }
func NewAuditService(uc *system.AuditUsecase) *AuditService { return &AuditService{uc: uc} }
type AuditRecorder struct{ uc *biz.AuditRecorderUsecase }
type AuditRecorder struct{ uc *system.AuditRecorderUsecase }
func NewAuditRecorder(uc *biz.AuditRecorderUsecase) *AuditRecorder { return &AuditRecorder{uc: uc} }
func NewAuditRecorder(uc *system.AuditRecorderUsecase) *AuditRecorder { return &AuditRecorder{uc: uc} }
func (s *AuditRecorder) RecordOperation(ctx context.Context, v *biz.OperationRecord) error {
func (s *AuditRecorder) RecordOperation(ctx context.Context, v *system.OperationRecord) error {
return s.uc.RecordOperation(ctx, v)
}
func (s *AuditRecorder) RecordOperationRequest(ctx context.Context, value *dto.OperationRecordRequest) error {
return s.RecordOperation(ctx, &biz.OperationRecord{IP: value.IP, Method: value.Method, Path: value.Path, Status: value.Status, LatencyMS: value.LatencyMS, Agent: value.Agent, ErrorMessage: value.ErrorMessage, Body: value.Body, Response: value.Response, UserID: value.UserID, RequestID: value.RequestID, TraceID: value.TraceID, DeviceID: value.DeviceID})
return s.RecordOperation(ctx, &system.OperationRecord{IP: value.IP, Method: value.Method, Path: value.Path, Status: value.Status, LatencyMS: value.LatencyMS, Agent: value.Agent, ErrorMessage: value.ErrorMessage, Body: value.Body, Response: value.Response, UserID: value.UserID, RequestID: value.RequestID, TraceID: value.TraceID, DeviceID: value.DeviceID})
}
func (s *AuditService) OperationsFilter(ctx context.Context, page, size int, path, method string, status int) ([]*dto.OperationRecordResponse, int64, error) {
return s.Operations(ctx, page, size, &biz.OperationRecord{Path: path, Method: method, Status: status})
return s.Operations(ctx, page, size, &system.OperationRecord{Path: path, Method: method, Status: status})
}
func opDTO(v *biz.OperationRecord) *dto.OperationRecordResponse {
func opDTO(v *system.OperationRecord) *dto.OperationRecordResponse {
var user any = map[string]any{}
if v.User != nil {
user = convertUser(v.User)
}
return &dto.OperationRecordResponse{ID: v.ID, CreatedAt: v.CreatedAt, UpdatedAt: v.UpdatedAt, DeletedAt: nil, IP: v.IP, Method: v.Method, Path: v.Path, Status: v.Status, LatencyMS: v.LatencyMS, Agent: v.Agent, ErrorMessage: v.ErrorMessage, Body: v.Body, Response: v.Response, UserID: v.UserID, RequestID: v.RequestID, TraceID: v.TraceID, DeviceID: v.DeviceID, User: user}
}
func (s *AuditService) Operations(ctx context.Context, page, size int, q *biz.OperationRecord) ([]*dto.OperationRecordResponse, int64, error) {
func (s *AuditService) Operations(ctx context.Context, page, size int, q *system.OperationRecord) ([]*dto.OperationRecordResponse, int64, error) {
items, total, err := s.uc.ListOperations(ctx, page, size, q)
if err != nil {
return nil, 0, err
@@ -53,23 +53,23 @@ func (s *AuditService) DeleteOperations(ctx context.Context, ids []int) error {
return s.uc.DeleteOperations(ctx, ids)
}
func (s *AuditRecorder) RecordLogin(ctx context.Context, v *biz.LoginLog) error {
func (s *AuditRecorder) RecordLogin(ctx context.Context, v *system.LoginLog) error {
return s.uc.RecordLogin(ctx, v)
}
func (s *AuditRecorder) RecordLoginRequest(ctx context.Context, value *dto.LoginLogRequest) error {
return s.RecordLogin(ctx, &biz.LoginLog{Username: value.Username, IP: value.IP, Status: value.Status, ErrorMessage: value.ErrorMessage, Agent: value.Agent, UserID: value.UserID})
return s.RecordLogin(ctx, &system.LoginLog{Username: value.Username, IP: value.IP, Status: value.Status, ErrorMessage: value.ErrorMessage, Agent: value.Agent, UserID: value.UserID})
}
func (s *AuditService) LoginsFilter(ctx context.Context, page, size int, username string, status bool) ([]*dto.LoginLogResponse, int64, error) {
return s.Logins(ctx, page, size, &biz.LoginLog{Username: username, Status: status, FilterByStatus: status})
return s.Logins(ctx, page, size, &system.LoginLog{Username: username, Status: status, FilterByStatus: status})
}
func loginDTO(v *biz.LoginLog) *dto.LoginLogResponse {
func loginDTO(v *system.LoginLog) *dto.LoginLogResponse {
var user any = map[string]any{}
if v.User != nil {
user = convertUser(v.User)
}
return &dto.LoginLogResponse{ID: v.ID, CreatedAt: v.CreatedAt, UpdatedAt: v.UpdatedAt, DeletedAt: nil, Username: v.Username, IP: v.IP, Status: v.Status, ErrorMessage: v.ErrorMessage, Agent: v.Agent, UserID: v.UserID, User: user}
}
func (s *AuditService) Logins(ctx context.Context, page, size int, q *biz.LoginLog) ([]*dto.LoginLogResponse, int64, error) {
func (s *AuditService) Logins(ctx context.Context, page, size int, q *system.LoginLog) ([]*dto.LoginLogResponse, int64, error) {
items, total, err := s.uc.ListLogins(ctx, page, size, q)
if err != nil {
return nil, 0, err
@@ -91,19 +91,19 @@ func (s *AuditService) DeleteLogins(ctx context.Context, ids []int) error {
return s.uc.DeleteLogins(ctx, ids)
}
func (s *AuditRecorder) RecordDataAccess(ctx context.Context, v *biz.DataAccessLog) error {
func (s *AuditRecorder) RecordDataAccess(ctx context.Context, v *system.DataAccessLog) error {
return s.uc.RecordDataAccess(ctx, v)
}
func (s *AuditRecorder) RecordDataAccessRequest(ctx context.Context, value *dto.DataAccessRecordRequest) error {
return s.RecordDataAccess(ctx, &biz.DataAccessLog{EventType: value.EventType, Operation: value.Operation, UserID: value.UserID, AuthorityID: value.AuthorityID, RequestID: value.RequestID, Method: value.Method, Path: value.Path, Detail: value.Detail})
return s.RecordDataAccess(ctx, &system.DataAccessLog{EventType: value.EventType, Operation: value.Operation, UserID: value.UserID, AuthorityID: value.AuthorityID, RequestID: value.RequestID, Method: value.Method, Path: value.Path, Detail: value.Detail})
}
func (s *AuditService) DataAccessRequest(ctx context.Context, req *dto.DataAccessListRequest) ([]*dto.DataAccessLogResponse, int64, error) {
return s.DataAccess(ctx, req.Page, req.PageSize, &biz.DataAccessLog{EventType: req.EventType, TargetTable: req.TargetTable})
return s.DataAccess(ctx, req.Page, req.PageSize, &system.DataAccessLog{EventType: req.EventType, TargetTable: req.TargetTable})
}
func dataAccessDTO(v *biz.DataAccessLog) *dto.DataAccessLogResponse {
func dataAccessDTO(v *system.DataAccessLog) *dto.DataAccessLogResponse {
return &dto.DataAccessLogResponse{ID: v.ID, CreatedAt: v.CreatedAt, UpdatedAt: v.UpdatedAt, DeletedAt: nil, EventType: v.EventType, TargetTable: v.TargetTable, Operation: v.Operation, UserID: v.UserID, AuthorityID: v.AuthorityID, Scope: v.Scope, RequestID: v.RequestID, Method: v.Method, Path: v.Path, Detail: v.Detail}
}
func (s *AuditService) DataAccess(ctx context.Context, page, size int, q *biz.DataAccessLog) ([]*dto.DataAccessLogResponse, int64, error) {
func (s *AuditService) DataAccess(ctx context.Context, page, size int, q *system.DataAccessLog) ([]*dto.DataAccessLogResponse, int64, error) {
items, total, err := s.uc.ListDataAccess(ctx, page, size, q)
if err != nil {
return nil, 0, err
+10 -10
View File
@@ -2,29 +2,29 @@ package service
import (
"context"
"kra/internal/biz/system"
"time"
"kra/internal/biz"
"kra/internal/service/dto"
)
func errorDTO(v *biz.ErrorRecord) *dto.ErrorRecordResponse {
func errorDTO(v *system.ErrorRecord) *dto.ErrorRecordResponse {
return &dto.ErrorRecordResponse{ID: v.ID, CreatedAt: v.CreatedAt, UpdatedAt: v.UpdatedAt, DeletedAt: nil, Form: v.Form, Info: v.Info, Level: v.Level, RequestID: v.RequestID, TraceID: v.TraceID, Solution: v.Solution, Status: v.Status}
}
func (s *AuditRecorder) CreateError(ctx context.Context, v *biz.ErrorRecord) error {
func (s *AuditRecorder) CreateError(ctx context.Context, v *system.ErrorRecord) error {
return s.uc.CreateError(ctx, v)
}
func recordedErrorDomain(value *dto.ErrorRecordRequest) *biz.ErrorRecord {
func recordedErrorDomain(value *dto.ErrorRecordRequest) *system.ErrorRecord {
form, info := value.Form, value.Info
result := &biz.ErrorRecord{Form: &form, Info: &info, Level: value.Level, RequestID: value.RequestID, TraceID: value.TraceID, Status: value.Status}
result := &system.ErrorRecord{Form: &form, Info: &info, Level: value.Level, RequestID: value.RequestID, TraceID: value.TraceID, Status: value.Status}
if value.Solution != "" {
solution := value.Solution
result.Solution = &solution
}
return result
}
func mutatedErrorDomain(value *dto.ErrorRecordMutationRequest) *biz.ErrorRecord {
return &biz.ErrorRecord{ID: value.ID, CreatedAt: value.CreatedAt, UpdatedAt: value.UpdatedAt, Form: value.Form, Info: value.Info, Level: value.Level, RequestID: value.RequestID, TraceID: value.TraceID, Solution: value.Solution, Status: value.Status}
func mutatedErrorDomain(value *dto.ErrorRecordMutationRequest) *system.ErrorRecord {
return &system.ErrorRecord{ID: value.ID, CreatedAt: value.CreatedAt, UpdatedAt: value.UpdatedAt, Form: value.Form, Info: value.Info, Level: value.Level, RequestID: value.RequestID, TraceID: value.TraceID, Solution: value.Solution, Status: value.Status}
}
func (s *AuditRecorder) CreateErrorRequest(ctx context.Context, req *dto.ErrorRecordRequest) error {
return s.CreateError(ctx, recordedErrorDomain(req))
@@ -36,7 +36,7 @@ func (s *AuditService) UpdateErrorRequest(ctx context.Context, req *dto.ErrorRec
return s.UpdateError(ctx, mutatedErrorDomain(req))
}
func (s *AuditService) ErrorsFilter(ctx context.Context, page, size int, form, info string, createdAtRange []time.Time) ([]*dto.ErrorRecordResponse, int64, error) {
query := &biz.ErrorRecord{CreatedAtRange: createdAtRange}
query := &system.ErrorRecord{CreatedAtRange: createdAtRange}
if form != "" {
query.Form = &form
}
@@ -45,7 +45,7 @@ func (s *AuditService) ErrorsFilter(ctx context.Context, page, size int, form, i
}
return s.Errors(ctx, page, size, query)
}
func (s *AuditService) UpdateError(ctx context.Context, v *biz.ErrorRecord) error {
func (s *AuditService) UpdateError(ctx context.Context, v *system.ErrorRecord) error {
return s.uc.UpdateError(ctx, v)
}
func (s *AuditService) DeleteErrors(ctx context.Context, ids []uint) error {
@@ -58,7 +58,7 @@ func (s *AuditService) Error(ctx context.Context, id uint) (*dto.ErrorRecordResp
}
return errorDTO(v), nil
}
func (s *AuditService) Errors(ctx context.Context, page, size int, q *biz.ErrorRecord) ([]*dto.ErrorRecordResponse, int64, error) {
func (s *AuditService) Errors(ctx context.Context, page, size int, q *system.ErrorRecord) ([]*dto.ErrorRecordResponse, int64, error) {
items, total, err := s.uc.ListErrors(ctx, page, size, q)
if err != nil {
return nil, 0, err
+3 -3
View File
@@ -2,14 +2,14 @@ package service
import (
"context"
"kra/internal/biz/system"
"kra/internal/biz"
"kra/internal/service/dto"
)
type LogViewerService struct{ uc *biz.LogViewerUsecase }
type LogViewerService struct{ uc *system.LogViewerUsecase }
func NewLogViewerService(uc *biz.LogViewerUsecase) *LogViewerService {
func NewLogViewerService(uc *system.LogViewerUsecase) *LogViewerService {
return &LogViewerService{uc: uc}
}
+7 -7
View File
@@ -2,32 +2,32 @@ package service
import (
"context"
"kra/internal/biz/system"
"kra/internal/biz"
"kra/internal/service/dto"
)
type AuthService struct {
uc *biz.AuthenticationUsecase
uc *system.AuthenticationUsecase
}
func NewAuthService(uc *biz.AuthenticationUsecase) *AuthService {
func NewAuthService(uc *system.AuthenticationUsecase) *AuthService {
return &AuthService{uc: uc}
}
func loginResult(value *biz.AuthenticationResult) *dto.LoginResponse {
func loginResult(value *system.AuthenticationResult) *dto.LoginResponse {
return &dto.LoginResponse{User: convertUser(value.User), Token: value.Token, ExpiresAt: value.ExpiresAt.UnixMilli(), NeedChangePassword: value.NeedChangePassword}
}
func (s *AuthService) Login(ctx context.Context, req *dto.LoginRequest, ip, agent string) (*dto.LoginResponse, error) {
value, err := s.uc.Login(ctx, &biz.LoginAttempt{Username: req.Username, Password: req.Password, CaptchaID: req.CaptchaID, Captcha: req.Captcha, IP: ip, Agent: agent})
value, err := s.uc.Login(ctx, &system.LoginAttempt{Username: req.Username, Password: req.Password, CaptchaID: req.CaptchaID, Captcha: req.Captcha, IP: ip, Agent: agent})
if err != nil {
return nil, err
}
return loginResult(value), nil
}
func (s *AuthService) SwitchAuthority(ctx context.Context, claims *biz.AuthClaims, authorityID uint) (*dto.LoginResponse, error) {
func (s *AuthService) SwitchAuthority(ctx context.Context, claims *system.AuthClaims, authorityID uint) (*dto.LoginResponse, error) {
value, err := s.uc.SwitchAuthority(ctx, claims, authorityID)
if err != nil {
return nil, err
@@ -35,6 +35,6 @@ func (s *AuthService) SwitchAuthority(ctx context.Context, claims *biz.AuthClaim
return loginResult(value), nil
}
func (s *AuthService) AuthenticateToken(ctx context.Context, token string) (*biz.TokenAuthentication, error) {
func (s *AuthService) AuthenticateToken(ctx context.Context, token string) (*system.TokenAuthentication, error) {
return s.uc.AuthenticateToken(ctx, token)
}
+7 -7
View File
@@ -2,18 +2,18 @@ package service
import (
"context"
"kra/internal/biz/system"
"kra/internal/biz"
"kra/internal/service/dto"
)
type AuthorityService struct{ uc *biz.AuthorityUsecase }
type AuthorityService struct{ uc *system.AuthorityUsecase }
func NewAuthorityService(uc *biz.AuthorityUsecase) *AuthorityService {
func NewAuthorityService(uc *system.AuthorityUsecase) *AuthorityService {
return &AuthorityService{uc: uc}
}
func authorityDTO(value *biz.Authority) *dto.AuthorityResponse {
func authorityDTO(value *system.Authority) *dto.AuthorityResponse {
out := convertAuthority(*value)
children := make([]*dto.AuthorityResponse, 0, len(value.Children))
for _, child := range value.Children {
@@ -23,11 +23,11 @@ func authorityDTO(value *biz.Authority) *dto.AuthorityResponse {
return out
}
func authorityDomain(req *dto.AuthorityRequest) *biz.Authority {
return &biz.Authority{AuthorityID: req.AuthorityID, AuthorityName: req.AuthorityName, ParentID: req.ParentID, DataScope: req.DataScope, DefaultRouter: req.DefaultRouter}
func authorityDomain(req *dto.AuthorityRequest) *system.Authority {
return &system.Authority{AuthorityID: req.AuthorityID, AuthorityName: req.AuthorityName, ParentID: req.ParentID, DataScope: req.DataScope, DefaultRouter: req.DefaultRouter}
}
func authorityResponse(value *biz.Authority) *dto.AuthorityResponse {
func authorityResponse(value *system.Authority) *dto.AuthorityResponse {
var menus []*dto.MenuResponse
if value.Menus != nil {
menus = menuResponses(value.Menus)
+6 -6
View File
@@ -2,18 +2,18 @@ package service
import (
"context"
"kra/internal/biz/system"
"kra/internal/biz"
"kra/internal/service/dto"
)
type DepartmentService struct{ uc *biz.DepartmentUsecase }
type DepartmentService struct{ uc *system.DepartmentUsecase }
func NewDepartmentService(uc *biz.DepartmentUsecase) *DepartmentService {
func NewDepartmentService(uc *system.DepartmentUsecase) *DepartmentService {
return &DepartmentService{uc: uc}
}
func departmentResponse(value *biz.Department) *dto.DepartmentResponse {
func departmentResponse(value *system.Department) *dto.DepartmentResponse {
var children []*dto.DepartmentResponse
if value.Children != nil {
children = make([]*dto.DepartmentResponse, 0, len(value.Children))
@@ -28,8 +28,8 @@ func departmentResponse(value *biz.Department) *dto.DepartmentResponse {
return &dto.DepartmentResponse{ID: value.ID, CreatedAt: value.CreatedAt, UpdatedAt: value.UpdatedAt, DeletedAt: nil, Name: value.Name, ParentID: value.ParentID, Ancestors: value.Ancestors, Sort: value.Sort, LeaderID: value.LeaderID, Leader: leader, Status: value.Status, Children: children, NamePath: value.NamePath}
}
func departmentDomain(value *dto.DepartmentRequest) *biz.Department {
return &biz.Department{ID: value.ID, Name: value.Name, ParentID: value.ParentID, Sort: value.Sort, LeaderID: value.LeaderID, Status: value.Status}
func departmentDomain(value *dto.DepartmentRequest) *system.Department {
return &system.Department{ID: value.ID, Name: value.Name, ParentID: value.ParentID, Sort: value.Sort, LeaderID: value.LeaderID, Status: value.Status}
}
func (s *DepartmentService) Departments(ctx context.Context, name string) ([]*dto.DepartmentResponse, error) {
+3 -4
View File
@@ -1,16 +1,15 @@
package service
import (
"kra/internal/biz/system"
"testing"
"kra/internal/biz"
)
func TestDepartmentResponsePreservesNilAndEmptyChildren(t *testing.T) {
if got := departmentResponse(&biz.Department{}).Children; got != nil {
if got := departmentResponse(&system.Department{}).Children; got != nil {
t.Fatalf("single/search department children = %#v, want nil", got)
}
if got := departmentResponse(&biz.Department{Children: []*biz.Department{}}).Children; got == nil || len(got) != 0 {
if got := departmentResponse(&system.Department{Children: []*system.Department{}}).Children; got == nil || len(got) != 0 {
t.Fatalf("tree leaf children = %#v, want empty slice", got)
}
}
+15 -15
View File
@@ -2,19 +2,19 @@ package service
import (
"context"
"kra/internal/biz/system"
"kra/internal/biz"
"kra/internal/service/dto"
)
type DictionaryService struct{ uc *biz.DictionaryUsecase }
type DictionaryService struct{ uc *system.DictionaryUsecase }
func NewDictionaryService(uc *biz.DictionaryUsecase) *DictionaryService {
func NewDictionaryService(uc *system.DictionaryUsecase) *DictionaryService {
return &DictionaryService{uc: uc}
}
func dictionaryDomain(value *dto.DictionaryRequest) *biz.Dictionary {
return &biz.Dictionary{ID: value.ID, Name: value.Name, Type: value.Type, Status: value.Status, Desc: value.Description, ParentID: value.ParentID}
func dictionaryDomain(value *dto.DictionaryRequest) *system.Dictionary {
return &system.Dictionary{ID: value.ID, Name: value.Name, Type: value.Type, Status: value.Status, Desc: value.Description, ParentID: value.ParentID}
}
func (s *DictionaryService) CreateDictionaryRequest(ctx context.Context, req *dto.DictionaryRequest) (*dto.DictionaryResponse, error) {
value := dictionaryDomain(req)
@@ -26,7 +26,7 @@ func (s *DictionaryService) CreateDictionaryRequest(ctx context.Context, req *dt
func (s *DictionaryService) UpdateDictionaryRequest(ctx context.Context, req *dto.DictionaryRequest) error {
return s.UpdateDictionary(ctx, dictionaryDomain(req))
}
func dictionaryDTO(v *biz.Dictionary) *dto.DictionaryResponse {
func dictionaryDTO(v *system.Dictionary) *dto.DictionaryResponse {
var children []*dto.DictionaryResponse
if v.Children != nil {
children = make([]*dto.DictionaryResponse, 0, len(v.Children))
@@ -78,18 +78,18 @@ func (s *DictionaryService) ExportDictionary(ctx context.Context, id uint) (*dto
SysDictionaryDetails: details,
}, nil
}
func (s *DictionaryService) CreateDictionary(ctx context.Context, v *biz.Dictionary) error {
func (s *DictionaryService) CreateDictionary(ctx context.Context, v *system.Dictionary) error {
return s.uc.CreateDictionary(ctx, v)
}
func (s *DictionaryService) UpdateDictionary(ctx context.Context, v *biz.Dictionary) error {
func (s *DictionaryService) UpdateDictionary(ctx context.Context, v *system.Dictionary) error {
return s.uc.UpdateDictionary(ctx, v)
}
func (s *DictionaryService) DeleteDictionary(ctx context.Context, id uint) error {
return s.uc.DeleteDictionary(ctx, id)
}
func detailDomain(value *dto.DictionaryDetailRequest) *biz.DictionaryDetail {
return &biz.DictionaryDetail{ID: value.ID, Label: value.Label, Value: value.Value, Extend: value.Extend, Status: value.Status, Sort: value.Sort, DictionaryID: value.DictionaryID, ParentID: value.ParentID, Level: value.Level, Path: value.Path}
func detailDomain(value *dto.DictionaryDetailRequest) *system.DictionaryDetail {
return &system.DictionaryDetail{ID: value.ID, Label: value.Label, Value: value.Value, Extend: value.Extend, Status: value.Status, Sort: value.Sort, DictionaryID: value.DictionaryID, ParentID: value.ParentID, Level: value.Level, Path: value.Path}
}
func (s *DictionaryService) CreateDictionaryDetailRequest(ctx context.Context, req *dto.DictionaryDetailRequest) error {
return s.CreateDictionaryDetail(ctx, detailDomain(req))
@@ -97,7 +97,7 @@ func (s *DictionaryService) CreateDictionaryDetailRequest(ctx context.Context, r
func (s *DictionaryService) UpdateDictionaryDetailRequest(ctx context.Context, req *dto.DictionaryDetailRequest) error {
return s.UpdateDictionaryDetail(ctx, detailDomain(req))
}
func detailDTO(v *biz.DictionaryDetail) *dto.DictionaryDetailResponse {
func detailDTO(v *system.DictionaryDetail) *dto.DictionaryDetailResponse {
var children []*dto.DictionaryDetailResponse
if v.Children != nil {
children = make([]*dto.DictionaryDetailResponse, 0, len(v.Children))
@@ -108,7 +108,7 @@ func detailDTO(v *biz.DictionaryDetail) *dto.DictionaryDetailResponse {
disabled := v.Status != nil && !*v.Status
return &dto.DictionaryDetailResponse{ID: v.ID, CreatedAt: v.CreatedAt, UpdatedAt: v.UpdatedAt, DeletedAt: nil, Label: v.Label, Value: v.Value, Extend: v.Extend, Status: v.Status, Sort: v.Sort, DictionaryID: v.DictionaryID, ParentID: v.ParentID, Level: v.Level, Path: v.Path, Disabled: disabled, Children: children}
}
func (s *DictionaryService) DictionaryDetails(ctx context.Context, page, size int, filter biz.DictionaryDetailFilter) ([]*dto.DictionaryDetailResponse, int64, error) {
func (s *DictionaryService) DictionaryDetails(ctx context.Context, page, size int, filter system.DictionaryDetailFilter) ([]*dto.DictionaryDetailResponse, int64, error) {
items, total, err := s.uc.ListDictionaryDetails(ctx, page, size, filter)
if err != nil {
return nil, 0, err
@@ -120,7 +120,7 @@ func (s *DictionaryService) DictionaryDetails(ctx context.Context, page, size in
return out, total, nil
}
func (s *DictionaryService) DictionaryDetailsRequest(ctx context.Context, page, size int, request dto.DictionaryDetailListRequest) ([]*dto.DictionaryDetailResponse, int64, error) {
return s.DictionaryDetails(ctx, page, size, biz.DictionaryDetailFilter{
return s.DictionaryDetails(ctx, page, size, system.DictionaryDetailFilter{
DictionaryID: request.DictionaryID,
Label: request.Label,
Value: request.Value,
@@ -162,10 +162,10 @@ func (s *DictionaryService) DictionaryTree(ctx context.Context, id uint, typ str
}
return out, nil
}
func (s *DictionaryService) CreateDictionaryDetail(ctx context.Context, v *biz.DictionaryDetail) error {
func (s *DictionaryService) CreateDictionaryDetail(ctx context.Context, v *system.DictionaryDetail) error {
return s.uc.CreateDictionaryDetail(ctx, v)
}
func (s *DictionaryService) UpdateDictionaryDetail(ctx context.Context, v *biz.DictionaryDetail) error {
func (s *DictionaryService) UpdateDictionaryDetail(ctx context.Context, v *system.DictionaryDetail) error {
return s.uc.UpdateDictionaryDetail(ctx, v)
}
func (s *DictionaryService) DeleteDictionaryDetail(ctx context.Context, id uint) error {
+2 -2
View File
@@ -4,8 +4,8 @@ import (
"context"
"encoding/json"
"errors"
"kra/internal/biz/system"
"kra/internal/biz"
"kra/internal/service/dto"
)
@@ -27,7 +27,7 @@ func (s *DictionaryService) ImportDictionaryJSON(ctx context.Context, raw string
return errors.New("字典类型不能为空")
}
dictionary := dictionaryDomain(&dto.DictionaryRequest{Name: payload.Name, Type: payload.Type, Status: payload.Status, Description: payload.Description})
details := make([]*biz.DictionaryDetail, 0, len(payload.Details))
details := make([]*system.DictionaryDetail, 0, len(payload.Details))
for i := range payload.Details {
details = append(details, detailDomain(&payload.Details[i]))
}
+5 -6
View File
@@ -2,22 +2,21 @@ package service
import (
"context"
"kra/internal/biz/system"
"testing"
"kra/internal/biz"
)
type dictionaryExportRepo struct {
biz.DictionaryRepo
value *biz.Dictionary
system.DictionaryRepo
value *system.Dictionary
}
func (r dictionaryExportRepo) ExportDictionary(context.Context, uint) (*biz.Dictionary, error) {
func (r dictionaryExportRepo) ExportDictionary(context.Context, uint) (*system.Dictionary, error) {
return r.value, nil
}
func TestExportDictionaryPreservesNilDetails(t *testing.T) {
service := NewDictionaryService(biz.NewDictionaryUsecase(dictionaryExportRepo{value: &biz.Dictionary{Name: "empty", Type: "empty"}}))
service := NewDictionaryService(system.NewDictionaryUsecase(dictionaryExportRepo{value: &system.Dictionary{Name: "empty", Type: "empty"}}))
result, err := service.ExportDictionary(context.Background(), 1)
if err != nil {
t.Fatal(err)
+9 -10
View File
@@ -2,8 +2,7 @@ package dto
import (
"encoding/json"
"kra/internal/biz"
"kra/internal/biz/system"
)
type IntegrationConfigRequest struct {
@@ -12,12 +11,12 @@ type IntegrationConfigRequest struct {
}
type IntegrationConfigResponse struct {
Kind string `json:"kind"`
Provider string `json:"provider"`
Name string `json:"name"`
Description string `json:"description,omitempty"`
Enabled bool `json:"enabled"`
Configured bool `json:"configured"`
Config json.RawMessage `json:"config"`
Fields []biz.IntegrationConfigField `json:"fields"`
Kind string `json:"kind"`
Provider string `json:"provider"`
Name string `json:"name"`
Description string `json:"description,omitempty"`
Enabled bool `json:"enabled"`
Configured bool `json:"configured"`
Config json.RawMessage `json:"config"`
Fields []system.IntegrationConfigField `json:"fields"`
}
+3 -3
View File
@@ -2,12 +2,12 @@ package service
import (
"context"
"kra/internal/biz"
"kra/internal/biz/system"
)
type EmailService struct{ uc *biz.EmailUsecase }
type EmailService struct{ uc *system.EmailUsecase }
func NewEmailService(uc *biz.EmailUsecase) *EmailService { return &EmailService{uc: uc} }
func NewEmailService(uc *system.EmailUsecase) *EmailService { return &EmailService{uc: uc} }
func (s *EmailService) Test(ctx context.Context) error { return s.uc.Test(ctx) }
+13 -13
View File
@@ -4,10 +4,10 @@ import (
"context"
"encoding/json"
"errors"
"kra/internal/biz/system"
"strings"
"time"
"kra/internal/biz"
"kra/internal/service/dto"
"github.com/google/uuid"
@@ -20,8 +20,8 @@ var (
)
type ExportService struct {
uc *biz.ExportUsecase
cache biz.Cache
uc *system.ExportUsecase
cache system.Cache
}
type ExportToken struct {
@@ -36,7 +36,7 @@ type exportTokenCache struct {
Blank bool `json:"blank"`
}
func NewExportService(uc *biz.ExportUsecase, cache biz.Cache) *ExportService {
func NewExportService(uc *system.ExportUsecase, cache system.Cache) *ExportService {
return &ExportService{uc: uc, cache: cache}
}
@@ -67,13 +67,13 @@ func (s *ExportService) ConsumeToken(ctx context.Context, token string, expectBl
_ = s.cache.Delete(ctx, "export:"+token)
return &ExportToken{TemplateID: value.TemplateID, Params: value.Params, Blank: value.Blank}, nil
}
func exportTemplateDomain(value *dto.ExportTemplateRequest) *biz.ExportTemplate {
out := &biz.ExportTemplate{ID: value.ID, DBName: value.DBName, Name: value.Name, TableName: value.TableName, TemplateID: value.TemplateID, TemplateInfo: value.TemplateInfo, SQL: value.SQL, ImportSQL: value.ImportSQL, Limit: value.Limit, Order: value.Order}
func exportTemplateDomain(value *dto.ExportTemplateRequest) *system.ExportTemplate {
out := &system.ExportTemplate{ID: value.ID, DBName: value.DBName, Name: value.Name, TableName: value.TableName, TemplateID: value.TemplateID, TemplateInfo: value.TemplateInfo, SQL: value.SQL, ImportSQL: value.ImportSQL, Limit: value.Limit, Order: value.Order}
for _, item := range value.Conditions {
out.Conditions = append(out.Conditions, biz.ExportCondition{ID: item.ID, CreatedAt: item.CreatedAt, UpdatedAt: item.UpdatedAt, TemplateID: item.TemplateID, From: item.From, Column: item.Column, Operator: item.Operator})
out.Conditions = append(out.Conditions, system.ExportCondition{ID: item.ID, CreatedAt: item.CreatedAt, UpdatedAt: item.UpdatedAt, TemplateID: item.TemplateID, From: item.From, Column: item.Column, Operator: item.Operator})
}
for _, item := range value.Joins {
out.Joins = append(out.Joins, biz.ExportJoin{ID: item.ID, CreatedAt: item.CreatedAt, UpdatedAt: item.UpdatedAt, TemplateID: item.TemplateID, Join: item.Join, Table: item.Table, On: item.On})
out.Joins = append(out.Joins, system.ExportJoin{ID: item.ID, CreatedAt: item.CreatedAt, UpdatedAt: item.UpdatedAt, TemplateID: item.TemplateID, Join: item.Join, Table: item.Table, On: item.On})
}
return out
}
@@ -84,9 +84,9 @@ func (s *ExportService) UpdateRequest(ctx context.Context, req *dto.ExportTempla
return s.Update(ctx, exportTemplateDomain(req))
}
func (s *ExportService) TemplatesFilter(ctx context.Context, page, size int, name, tableName, templateID string, start, end *time.Time) ([]*dto.ExportTemplateResponse, int64, error) {
return s.Templates(ctx, page, size, &biz.ExportTemplate{Name: name, TableName: tableName, TemplateID: templateID, StartCreatedAt: start, EndCreatedAt: end})
return s.Templates(ctx, page, size, &system.ExportTemplate{Name: name, TableName: tableName, TemplateID: templateID, StartCreatedAt: start, EndCreatedAt: end})
}
func exportDTO(v *biz.ExportTemplate) *dto.ExportTemplateResponse {
func exportDTO(v *system.ExportTemplate) *dto.ExportTemplateResponse {
var conditions []dto.ExportConditionResponse
if v.Conditions != nil {
conditions = make([]dto.ExportConditionResponse, 0, len(v.Conditions))
@@ -103,10 +103,10 @@ func exportDTO(v *biz.ExportTemplate) *dto.ExportTemplateResponse {
}
return &dto.ExportTemplateResponse{ID: v.ID, CreatedAt: v.CreatedAt, UpdatedAt: v.UpdatedAt, DeletedAt: nil, DBName: v.DBName, Name: v.Name, TableName: v.TableName, TemplateID: v.TemplateID, TemplateInfo: v.TemplateInfo, SQL: v.SQL, ImportSQL: v.ImportSQL, Limit: v.Limit, Order: v.Order, Conditions: conditions, Joins: joins}
}
func (s *ExportService) Create(ctx context.Context, v *biz.ExportTemplate) error {
func (s *ExportService) Create(ctx context.Context, v *system.ExportTemplate) error {
return s.uc.CreateExportTemplate(ctx, v)
}
func (s *ExportService) Update(ctx context.Context, v *biz.ExportTemplate) error {
func (s *ExportService) Update(ctx context.Context, v *system.ExportTemplate) error {
return s.uc.UpdateExportTemplate(ctx, v)
}
func (s *ExportService) Delete(ctx context.Context, ids []uint) error {
@@ -119,7 +119,7 @@ func (s *ExportService) Template(ctx context.Context, id uint, tid string) (*dto
}
return exportDTO(v), nil
}
func (s *ExportService) Templates(ctx context.Context, page, size int, q *biz.ExportTemplate) ([]*dto.ExportTemplateResponse, int64, error) {
func (s *ExportService) Templates(ctx context.Context, page, size int, q *system.ExportTemplate) ([]*dto.ExportTemplateResponse, int64, error) {
items, total, err := s.uc.ListExportTemplates(ctx, page, size, q)
if err != nil {
return nil, 0, err
+10 -8
View File
@@ -3,14 +3,16 @@ package service
import (
"context"
"encoding/json"
"kra/internal/biz/system"
"kra/internal/biz"
"kra/internal/service/dto"
)
type IntegrationConfigService struct{ uc *biz.IntegrationConfigUsecase }
type IntegrationConfigService struct {
uc *system.IntegrationConfigUsecase
}
func NewIntegrationConfigService(uc *biz.IntegrationConfigUsecase) *IntegrationConfigService {
func NewIntegrationConfigService(uc *system.IntegrationConfigUsecase) *IntegrationConfigService {
return &IntegrationConfigService{uc: uc}
}
@@ -19,13 +21,13 @@ func (s *IntegrationConfigService) List(ctx context.Context, kind string) ([]*dt
if err != nil {
return nil, err
}
byProvider := make(map[string]*biz.IntegrationConfig, len(configs))
byProvider := make(map[string]*system.IntegrationConfig, len(configs))
for _, config := range configs {
if config != nil {
byProvider[config.Provider] = config
}
}
definitions := biz.IntegrationDefinitions(kind)
definitions := system.IntegrationDefinitions(kind)
result := make([]*dto.IntegrationConfigResponse, 0, len(definitions)+len(configs))
for _, definition := range definitions {
config, configured := byProvider[definition.Provider]
@@ -52,7 +54,7 @@ func (s *IntegrationConfigService) Find(ctx context.Context, kind, provider stri
if err != nil {
return nil, err
}
definition, found := biz.IntegrationDefinition(config.Kind, config.Provider)
definition, found := system.IntegrationDefinition(config.Kind, config.Provider)
response := &dto.IntegrationConfigResponse{Kind: config.Kind, Provider: config.Provider, Name: config.Provider, Enabled: config.Enabled, Configured: true, Config: config.Values}
if found {
response.Name = definition.Name
@@ -67,14 +69,14 @@ func (s *IntegrationConfigService) Save(ctx context.Context, kind, provider stri
if req == nil {
return s.uc.Save(ctx, nil)
}
return s.uc.Save(ctx, &biz.IntegrationConfig{Kind: kind, Provider: provider, Enabled: req.Enabled, Values: req.Config})
return s.uc.Save(ctx, &system.IntegrationConfig{Kind: kind, Provider: provider, Enabled: req.Enabled, Values: req.Config})
}
func (s *IntegrationConfigService) Test(ctx context.Context, kind, provider string, req *dto.IntegrationConfigRequest) error {
if req == nil {
return s.uc.Test(ctx, nil)
}
return s.uc.Test(ctx, &biz.IntegrationConfig{Kind: kind, Provider: provider, Enabled: true, Values: req.Config})
return s.uc.Test(ctx, &system.IntegrationConfig{Kind: kind, Provider: provider, Enabled: true, Values: req.Config})
}
func (s *IntegrationConfigService) Delete(ctx context.Context, kind, provider string) error {
+14 -14
View File
@@ -3,26 +3,26 @@ package service
import (
"context"
"io"
"kra/internal/biz/system"
"kra/internal/biz"
"kra/internal/service/dto"
)
type MediaService struct {
uc *biz.MediaUsecase
settings biz.RuntimeSettings
uc *system.MediaUsecase
settings system.RuntimeSettings
}
func NewMediaService(uc *biz.MediaUsecase, settings biz.RuntimeSettings) *MediaService {
func NewMediaService(uc *system.MediaUsecase, settings system.RuntimeSettings) *MediaService {
return &MediaService{uc: uc, settings: settings}
}
func (s *MediaService) MediaConfig() biz.MediaSettings {
func (s *MediaService) MediaConfig() system.MediaSettings {
return s.settings.MediaSettings()
}
func mediaDTO(v *biz.MediaFile) *dto.MediaResponse {
func mediaDTO(v *system.MediaFile) *dto.MediaResponse {
return &dto.MediaResponse{ID: v.ID, CreatedAt: v.CreatedAt, UpdatedAt: v.UpdatedAt, DeletedAt: nil, Name: v.Name, ClassID: v.CategoryID, URL: v.URL, Tag: v.Tag, Key: v.Key, Size: v.Size, Mime: v.Mime, MD5: v.MD5, UserID: v.UserID}
}
func categoryDTO(v *biz.AttachmentCategory) *dto.MediaCategoryResponse {
func categoryDTO(v *system.AttachmentCategory) *dto.MediaCategoryResponse {
var children []*dto.MediaCategoryResponse
if v.Children != nil {
children = make([]*dto.MediaCategoryResponse, 0, len(v.Children))
@@ -46,7 +46,7 @@ func (s *MediaService) Media(ctx context.Context, id uint) (*dto.MediaResponse,
}
return mediaDTO(v), nil
}
func (s *MediaService) MediaList(ctx context.Context, filter biz.MediaFilter) ([]*dto.MediaResponse, int64, error) {
func (s *MediaService) MediaList(ctx context.Context, filter system.MediaFilter) ([]*dto.MediaResponse, int64, error) {
items, total, err := s.uc.ListMedia(ctx, filter)
if err != nil {
return nil, 0, err
@@ -58,7 +58,7 @@ func (s *MediaService) MediaList(ctx context.Context, filter biz.MediaFilter) ([
return out, total, nil
}
func (s *MediaService) MediaListRequest(ctx context.Context, request *dto.MediaListRequest) ([]*dto.MediaResponse, int64, error) {
return s.MediaList(ctx, biz.MediaFilter{
return s.MediaList(ctx, system.MediaFilter{
Page: request.Page, PageSize: request.PageSize, Keyword: request.Keyword,
CategoryID: request.ClassID, Tag: request.Tag, UserID: request.UserID,
StartCreatedAt: request.StartCreatedAt, EndCreatedAt: request.EndCreatedAt,
@@ -69,13 +69,13 @@ func (s *MediaService) Delete(ctx context.Context, id uint) error { return s.uc.
func (s *MediaService) Rename(ctx context.Context, id uint, name string) error {
return s.uc.UpdateMediaName(ctx, id, name)
}
func (s *MediaService) ImportURLs(ctx context.Context, items []*biz.MediaFile) error {
func (s *MediaService) ImportURLs(ctx context.Context, items []*system.MediaFile) error {
return s.uc.CreateMediaBatch(ctx, items)
}
func (s *MediaService) ImportURLRequests(ctx context.Context, values []dto.ImportMediaRequest) error {
items := make([]*biz.MediaFile, 0, len(values))
items := make([]*system.MediaFile, 0, len(values))
for _, value := range values {
items = append(items, &biz.MediaFile{Name: value.Name, CategoryID: value.ClassID, URL: value.URL, Tag: value.Tag, Key: value.Key, Size: value.Size, Mime: value.Mime, MD5: value.MD5, UserID: value.UserID})
items = append(items, &system.MediaFile{Name: value.Name, CategoryID: value.ClassID, URL: value.URL, Tag: value.Tag, Key: value.Key, Size: value.Size, Mime: value.Mime, MD5: value.MD5, UserID: value.UserID})
}
return s.ImportURLs(ctx, items)
}
@@ -101,11 +101,11 @@ func (s *MediaService) Categories(ctx context.Context) ([]*dto.MediaCategoryResp
}
return out, nil
}
func (s *MediaService) SaveCategory(ctx context.Context, v *biz.AttachmentCategory) error {
func (s *MediaService) SaveCategory(ctx context.Context, v *system.AttachmentCategory) error {
return s.uc.SaveCategory(ctx, v)
}
func (s *MediaService) SaveCategoryRequest(ctx context.Context, value *dto.CategoryRequest) error {
return s.SaveCategory(ctx, &biz.AttachmentCategory{ID: value.ID, Name: value.Name, ParentID: value.PID})
return s.SaveCategory(ctx, &system.AttachmentCategory{ID: value.ID, Name: value.Name, ParentID: value.PID})
}
func (s *MediaService) DeleteCategory(ctx context.Context, id uint) error {
return s.uc.DeleteCategory(ctx, id)
+13 -13
View File
@@ -2,14 +2,14 @@ package service
import (
"context"
"kra/internal/biz/system"
"kra/internal/biz"
"kra/internal/service/dto"
)
type MenuService struct{ uc *biz.MenuUsecase }
type MenuService struct{ uc *system.MenuUsecase }
func NewMenuService(uc *biz.MenuUsecase) *MenuService { return &MenuService{uc: uc} }
func NewMenuService(uc *system.MenuUsecase) *MenuService { return &MenuService{uc: uc} }
func (s *MenuService) List(ctx context.Context) ([]*dto.MenuResponse, error) {
items, err := s.uc.List(ctx)
@@ -74,20 +74,20 @@ func (s *MenuService) SetRoles(ctx context.Context, req *dto.SetMenuRolesRequest
return s.uc.SetRoles(ctx, req.MenuID, req.AuthorityIDs)
}
func menuDomain(v *dto.MenuRequest) *biz.Menu {
menu := &biz.Menu{CreatedAt: v.CreatedAt, UpdatedAt: v.UpdatedAt, ID: v.ID, ParentID: v.ParentID, Path: v.Path, Name: v.Name, Hidden: v.Hidden, Component: v.Component, Sort: v.Sort, ActiveName: v.Meta.ActiveName, KeepAlive: v.Meta.KeepAlive, DefaultMenu: v.Meta.DefaultMenu, Title: v.Meta.Title, Icon: v.Meta.Icon, CloseTab: v.Meta.CloseTab, TransitionType: v.Meta.TransitionType}
menu.Buttons = make([]*biz.MenuButton, 0, len(v.MenuButtons))
func menuDomain(v *dto.MenuRequest) *system.Menu {
menu := &system.Menu{CreatedAt: v.CreatedAt, UpdatedAt: v.UpdatedAt, ID: v.ID, ParentID: v.ParentID, Path: v.Path, Name: v.Name, Hidden: v.Hidden, Component: v.Component, Sort: v.Sort, ActiveName: v.Meta.ActiveName, KeepAlive: v.Meta.KeepAlive, DefaultMenu: v.Meta.DefaultMenu, Title: v.Meta.Title, Icon: v.Meta.Icon, CloseTab: v.Meta.CloseTab, TransitionType: v.Meta.TransitionType}
menu.Buttons = make([]*system.MenuButton, 0, len(v.MenuButtons))
for _, button := range v.MenuButtons {
menu.Buttons = append(menu.Buttons, &biz.MenuButton{CreatedAt: button.CreatedAt, UpdatedAt: button.UpdatedAt, ID: button.ID, Name: button.Name, Description: button.Description, MenuID: v.ID})
menu.Buttons = append(menu.Buttons, &system.MenuButton{CreatedAt: button.CreatedAt, UpdatedAt: button.UpdatedAt, ID: button.ID, Name: button.Name, Description: button.Description, MenuID: v.ID})
}
menu.Parameters = make([]*biz.MenuParameter, 0, len(v.Parameters))
menu.Parameters = make([]*system.MenuParameter, 0, len(v.Parameters))
for _, parameter := range v.Parameters {
menu.Parameters = append(menu.Parameters, &biz.MenuParameter{CreatedAt: parameter.CreatedAt, UpdatedAt: parameter.UpdatedAt, ID: parameter.ID, MenuID: v.ID, Type: parameter.Type, Key: parameter.Key, Value: parameter.Value})
menu.Parameters = append(menu.Parameters, &system.MenuParameter{CreatedAt: parameter.CreatedAt, UpdatedAt: parameter.UpdatedAt, ID: parameter.ID, MenuID: v.ID, Type: parameter.Type, Key: parameter.Key, Value: parameter.Value})
}
return menu
}
func menuResponse(menu *biz.Menu) *dto.MenuResponse {
func menuResponse(menu *system.Menu) *dto.MenuResponse {
var children []*dto.MenuResponse
if menu.Children != nil {
children = make([]*dto.MenuResponse, 0, len(menu.Children))
@@ -112,7 +112,7 @@ func menuResponse(menu *biz.Menu) *dto.MenuResponse {
return &dto.MenuResponse{CreatedAt: menu.CreatedAt, UpdatedAt: menu.UpdatedAt, ID: menu.ID, MenuID: menu.MenuID, ParentID: menu.ParentID, Path: menu.Path, Name: menu.Name, Hidden: menu.Hidden, Component: menu.Component, Sort: menu.Sort, Meta: dto.MenuMetaResponse{ActiveName: menu.ActiveName, KeepAlive: menu.KeepAlive, DefaultMenu: menu.DefaultMenu, Title: menu.Title, Icon: menu.Icon, CloseTab: menu.CloseTab, TransitionType: menu.TransitionType}, Children: children, Parameters: parameters, MenuButtons: buttons}
}
func dynamicMenuResponse(menu *biz.Menu) *dto.DynamicMenuResponse {
func dynamicMenuResponse(menu *system.Menu) *dto.DynamicMenuResponse {
var children []*dto.DynamicMenuResponse
if menu.Children != nil {
children = make([]*dto.DynamicMenuResponse, 0, len(menu.Children))
@@ -140,7 +140,7 @@ func dynamicMenuResponse(menu *biz.Menu) *dto.DynamicMenuResponse {
return &dto.DynamicMenuResponse{CreatedAt: menu.CreatedAt, UpdatedAt: menu.UpdatedAt, ID: menu.ID, MenuID: menu.MenuID, ParentID: menu.ParentID, Path: menu.Path, Name: menu.Name, Hidden: menu.Hidden, Component: menu.Component, Sort: menu.Sort, Meta: dto.MenuMetaResponse{ActiveName: menu.ActiveName, KeepAlive: menu.KeepAlive, DefaultMenu: menu.DefaultMenu, Title: menu.Title, Icon: menu.Icon, CloseTab: menu.CloseTab, TransitionType: menu.TransitionType}, Children: children, Parameters: parameters, MenuButtons: nil, Buttons: buttonAuthorities}
}
func menuResponses(items []*biz.Menu) []*dto.MenuResponse {
func menuResponses(items []*system.Menu) []*dto.MenuResponse {
if items == nil {
return nil
}
@@ -151,7 +151,7 @@ func menuResponses(items []*biz.Menu) []*dto.MenuResponse {
return out
}
func dynamicMenuResponses(items []*biz.Menu) []*dto.DynamicMenuResponse {
func dynamicMenuResponses(items []*system.Menu) []*dto.DynamicMenuResponse {
out := make([]*dto.DynamicMenuResponse, 0, len(items))
for _, item := range items {
out = append(out, dynamicMenuResponse(item))
+2 -2
View File
@@ -2,10 +2,10 @@ package service
import (
"encoding/json"
"kra/internal/biz/system"
"testing"
"time"
"kra/internal/biz"
"kra/internal/service/dto"
)
@@ -42,7 +42,7 @@ func TestMenuResponseEmptyCollectionContracts(t *testing.T) {
t.Fatalf("dynamic menu top-level empty = %#v, want non-nil empty slice", got)
}
base := menuResponse(&biz.Menu{Children: nil, Buttons: []*biz.MenuButton{}, Parameters: []*biz.MenuParameter{}})
base := menuResponse(&system.Menu{Children: nil, Buttons: []*system.MenuButton{}, Parameters: []*system.MenuParameter{}})
if base.Children != nil {
t.Fatalf("leaf children = %#v, want nil", base.Children)
}
+10 -10
View File
@@ -2,20 +2,20 @@ package service
import (
"context"
"kra/internal/biz/system"
"time"
"kra/internal/biz"
"kra/internal/service/dto"
)
type ParameterService struct{ uc *biz.ParameterUsecase }
type ParameterService struct{ uc *system.ParameterUsecase }
func NewParameterService(uc *biz.ParameterUsecase) *ParameterService {
func NewParameterService(uc *system.ParameterUsecase) *ParameterService {
return &ParameterService{uc: uc}
}
func parameterDomain(value *dto.SystemParameterRequest) *biz.SystemParameter {
return &biz.SystemParameter{ID: value.ID, CreatedAt: value.CreatedAt, UpdatedAt: value.UpdatedAt, Name: value.Name, Key: value.Key, Value: value.Value, Desc: value.Description}
func parameterDomain(value *dto.SystemParameterRequest) *system.SystemParameter {
return &system.SystemParameter{ID: value.ID, CreatedAt: value.CreatedAt, UpdatedAt: value.UpdatedAt, Name: value.Name, Key: value.Key, Value: value.Value, Desc: value.Description}
}
func (s *ParameterService) CreateParameterRequest(ctx context.Context, req *dto.SystemParameterRequest) error {
return s.CreateParameter(ctx, parameterDomain(req))
@@ -24,12 +24,12 @@ func (s *ParameterService) UpdateParameterRequest(ctx context.Context, req *dto.
return s.UpdateParameter(ctx, parameterDomain(req))
}
func (s *ParameterService) ParametersFilter(ctx context.Context, page, size int, name, key string, start, end *time.Time) ([]*dto.SystemParameterResponse, int64, error) {
return s.Parameters(ctx, page, size, &biz.SystemParameter{Name: name, Key: key, StartCreatedAt: start, EndCreatedAt: end})
return s.Parameters(ctx, page, size, &system.SystemParameter{Name: name, Key: key, StartCreatedAt: start, EndCreatedAt: end})
}
func parameterDTO(v *biz.SystemParameter) *dto.SystemParameterResponse {
func parameterDTO(v *system.SystemParameter) *dto.SystemParameterResponse {
return &dto.SystemParameterResponse{ID: v.ID, CreatedAt: v.CreatedAt, UpdatedAt: v.UpdatedAt, DeletedAt: nil, Name: v.Name, Key: v.Key, Value: v.Value, Desc: v.Desc}
}
func (s *ParameterService) Parameters(ctx context.Context, page, size int, q *biz.SystemParameter) ([]*dto.SystemParameterResponse, int64, error) {
func (s *ParameterService) Parameters(ctx context.Context, page, size int, q *system.SystemParameter) ([]*dto.SystemParameterResponse, int64, error) {
items, total, err := s.uc.ListParameters(ctx, page, size, q)
if err != nil {
return nil, 0, err
@@ -54,10 +54,10 @@ func (s *ParameterService) ParameterByKey(ctx context.Context, key string) (*dto
}
return parameterDTO(v), nil
}
func (s *ParameterService) CreateParameter(ctx context.Context, v *biz.SystemParameter) error {
func (s *ParameterService) CreateParameter(ctx context.Context, v *system.SystemParameter) error {
return s.uc.CreateParameter(ctx, v)
}
func (s *ParameterService) UpdateParameter(ctx context.Context, v *biz.SystemParameter) error {
func (s *ParameterService) UpdateParameter(ctx context.Context, v *system.SystemParameter) error {
return s.uc.UpdateParameter(ctx, v)
}
func (s *ParameterService) DeleteParameters(ctx context.Context, ids []string) error {
+13 -13
View File
@@ -3,14 +3,14 @@ package service
import (
"context"
"errors"
"kra/internal/biz/system"
"kra/internal/biz"
"kra/internal/service/dto"
)
type PaymentService struct{ uc *biz.PaymentUsecase }
type PaymentService struct{ uc *system.PaymentUsecase }
func NewPaymentService(uc *biz.PaymentUsecase) *PaymentService { return &PaymentService{uc: uc} }
func NewPaymentService(uc *system.PaymentUsecase) *PaymentService { return &PaymentService{uc: uc} }
func (s *PaymentService) Order(ctx context.Context, provider, tradeNo string) (*dto.PaymentOrderResponse, error) {
order, err := s.uc.Order(ctx, provider, tradeNo)
if err != nil {
@@ -44,7 +44,7 @@ func (s *PaymentService) Orders(ctx context.Context, req *dto.PaymentOrderListRe
if pageSize <= 0 {
pageSize = 10
}
items, total, err := s.uc.Orders(ctx, page, pageSize, biz.PaymentOrderFilter{
items, total, err := s.uc.Orders(ctx, page, pageSize, system.PaymentOrderFilter{
Provider: req.Provider, TradeNo: req.TradeNo, BusinessType: req.BusinessType,
BusinessID: req.BusinessID, PaymentStatus: req.PaymentStatus, RefundStatus: req.RefundStatus,
})
@@ -62,7 +62,7 @@ func (s *PaymentService) Orders(ctx context.Context, req *dto.PaymentOrderListRe
return result, total, page, pageSize, nil
}
func paymentOrderResponse(order *biz.PaymentOrder) (*dto.PaymentOrderResponse, error) {
func paymentOrderResponse(order *system.PaymentOrder) (*dto.PaymentOrderResponse, error) {
if order == nil {
return nil, errors.New("支付订单为空")
}
@@ -84,7 +84,7 @@ func (s *PaymentService) Create(ctx context.Context, req *dto.PaymentRequest) (*
if req == nil {
return nil, errors.New("支付请求为空")
}
result, err := s.uc.Create(ctx, &biz.PaymentRequest{
result, err := s.uc.Create(ctx, &system.PaymentRequest{
Provider: req.Provider, TradeNo: req.TradeNo, Subject: req.Subject,
Amount: req.Amount, OriginalAmount: req.OriginalAmount, Currency: req.Currency,
NotifyURL: req.NotifyURL, ReturnURL: req.ReturnURL, ClientIP: req.ClientIP,
@@ -130,13 +130,13 @@ func (s *PaymentService) Fulfill(ctx context.Context, req *dto.PaymentFulfillReq
}
func (s *PaymentService) Callback(ctx context.Context, req *dto.PaymentCallbackRequest) (dto.PaymentCallbackAck, error) {
if req == nil {
return paymentCallbackAckResponse(biz.DefaultPaymentCallbackAck("", false)), errors.New("支付回调请求为空")
return paymentCallbackAckResponse(system.DefaultPaymentCallbackAck("", false)), errors.New("支付回调请求为空")
}
result, err := s.uc.Callback(ctx, &biz.PaymentCallback{Provider: req.Provider, Headers: req.Headers, Body: req.Body, Query: req.Query})
result, err := s.uc.Callback(ctx, &system.PaymentCallback{Provider: req.Provider, Headers: req.Headers, Body: req.Body, Query: req.Query})
if err != nil {
return paymentCallbackAckResponse(biz.CallbackFailure(err, biz.DefaultPaymentCallbackAck(req.Provider, false))), err
return paymentCallbackAckResponse(system.CallbackFailure(err, system.DefaultPaymentCallbackAck(req.Provider, false))), err
}
ack := biz.DefaultPaymentCallbackAck(req.Provider, true)
ack := system.DefaultPaymentCallbackAck(req.Provider, true)
if result != nil && result.SuccessAck.StatusCode != 0 {
ack = result.SuccessAck
}
@@ -144,10 +144,10 @@ func (s *PaymentService) Callback(ctx context.Context, req *dto.PaymentCallbackR
}
func DefaultPaymentCallbackAck(provider string, success bool) dto.PaymentCallbackAck {
return paymentCallbackAckResponse(biz.DefaultPaymentCallbackAck(provider, success))
return paymentCallbackAckResponse(system.DefaultPaymentCallbackAck(provider, success))
}
func paymentResultResponse(result *biz.PaymentResult) *dto.PaymentResultResponse {
func paymentResultResponse(result *system.PaymentResult) *dto.PaymentResultResponse {
if result == nil {
return nil
}
@@ -165,6 +165,6 @@ func paymentResultResponse(result *biz.PaymentResult) *dto.PaymentResultResponse
}
}
func paymentCallbackAckResponse(ack biz.PaymentCallbackAck) dto.PaymentCallbackAck {
func paymentCallbackAckResponse(ack system.PaymentCallbackAck) dto.PaymentCallbackAck {
return dto.PaymentCallbackAck{StatusCode: ack.StatusCode, ContentType: ack.ContentType, Body: ack.Body}
}
+3 -4
View File
@@ -2,13 +2,12 @@ package service
import (
"context"
"kra/internal/biz"
"kra/internal/biz/system"
)
type PermissionService struct{ uc *biz.PermissionUsecase }
type PermissionService struct{ uc *system.PermissionUsecase }
func NewPermissionService(uc *biz.PermissionUsecase) *PermissionService {
func NewPermissionService(uc *system.PermissionUsecase) *PermissionService {
return &PermissionService{uc: uc}
}
+7 -7
View File
@@ -2,27 +2,27 @@ package service
import (
"context"
"kra/internal/biz/system"
"kra/internal/biz"
"kra/internal/service/dto"
)
type PositionService struct{ uc *biz.PositionUsecase }
type PositionService struct{ uc *system.PositionUsecase }
func NewPositionService(uc *biz.PositionUsecase) *PositionService {
func NewPositionService(uc *system.PositionUsecase) *PositionService {
return &PositionService{uc: uc}
}
func positionDomain(value *dto.PositionRequest) *biz.Position {
return &biz.Position{ID: value.ID, Name: value.Name, Code: value.Code, Sort: value.Sort, Status: value.Status, Remark: value.Remark}
func positionDomain(value *dto.PositionRequest) *system.Position {
return &system.Position{ID: value.ID, Name: value.Name, Code: value.Code, Sort: value.Sort, Status: value.Status, Remark: value.Remark}
}
func positionResponse(value *biz.Position) *dto.PositionResponse {
func positionResponse(value *system.Position) *dto.PositionResponse {
return &dto.PositionResponse{ID: value.ID, CreatedAt: value.CreatedAt, UpdatedAt: value.UpdatedAt, DeletedAt: nil, Name: value.Name, Code: value.Code, Sort: value.Sort, Status: value.Status, Remark: value.Remark}
}
func (s *PositionService) Positions(ctx context.Context, req *dto.PositionListRequest) ([]*dto.PositionResponse, int64, error) {
items, total, err := s.uc.Positions(ctx, req.Page, req.PageSize, &biz.PositionListFilter{Name: req.Name, Code: req.Code, Status: req.Status})
items, total, err := s.uc.Positions(ctx, req.Page, req.PageSize, &system.PositionListFilter{Name: req.Name, Code: req.Code, Status: req.Status})
if err != nil {
return nil, 0, err
}
+5 -5
View File
@@ -3,8 +3,8 @@ package service
import (
"context"
"errors"
"kra/internal/biz/system"
"kra/internal/biz"
"kra/internal/service/dto"
)
@@ -18,10 +18,10 @@ func IsPasswordPolicyError(err error) bool {
return errors.As(err, &policyErr)
}
func securityDTO(v *biz.SecurityConfig) *dto.SecurityConfigResponse {
func securityDTO(v *system.SecurityConfig) *dto.SecurityConfigResponse {
return &dto.SecurityConfigResponse{ID: v.ID, CreatedAt: v.CreatedAt, UpdatedAt: v.UpdatedAt, DeletedAt: nil, CaptchaOpen: v.CaptchaOpen, CaptchaTimeout: v.CaptchaTimeout, KeyLong: v.KeyLong, ImgWidth: v.ImgWidth, ImgHeight: v.ImgHeight, PwdMinLength: v.PwdMinLength, PwdRequireUpper: v.PwdRequireUpper, PwdRequireLower: v.PwdRequireLower, PwdRequireDigit: v.PwdRequireDigit, PwdRequireSpecial: v.PwdRequireSpecial, LimitEnable: v.LimitEnable, LimitWindow: v.LimitWindow, LimitCount: v.LimitCount, LockEnable: v.LockEnable, LockThreshold: v.LockThreshold, LockDuration: v.LockDuration, PwdExpireEnable: v.PwdExpireEnable, PwdExpireDays: v.PwdExpireDays, ForceNewUserChangePassword: v.ForceNewUserChangePassword}
}
func (s *SecurityService) CurrentSecurity(ctx context.Context) (*biz.SecurityConfig, error) {
func (s *SecurityService) CurrentSecurity(ctx context.Context) (*system.SecurityConfig, error) {
return s.uc.Current(ctx)
}
func (s *SecurityService) Security(ctx context.Context) (*dto.SecurityConfigResponse, error) {
@@ -31,14 +31,14 @@ func (s *SecurityService) Security(ctx context.Context) (*dto.SecurityConfigResp
}
return securityDTO(value), nil
}
func (s *SecurityService) SaveSecurity(ctx context.Context, value *biz.SecurityConfig) (*dto.SecurityConfigResponse, error) {
func (s *SecurityService) SaveSecurity(ctx context.Context, value *system.SecurityConfig) (*dto.SecurityConfigResponse, error) {
if err := s.uc.UpdateSecurity(ctx, value); err != nil {
return nil, err
}
return securityDTO(value), nil
}
func (s *SecurityService) SaveSecurityRequest(ctx context.Context, value *dto.SecurityConfigRequest) (*dto.SecurityConfigResponse, error) {
return s.SaveSecurity(ctx, &biz.SecurityConfig{
return s.SaveSecurity(ctx, &system.SecurityConfig{
ID: value.ID, CaptchaOpen: value.CaptchaOpen, CaptchaTimeout: value.CaptchaTimeout,
KeyLong: value.KeyLong, ImgWidth: value.ImgWidth, ImgHeight: value.ImgHeight,
PwdMinLength: value.PwdMinLength, PwdRequireUpper: value.PwdRequireUpper,
+4 -5
View File
@@ -2,16 +2,15 @@ package service
import (
"context"
"kra/internal/biz/system"
"time"
"kra/internal/biz"
)
type SecurityService struct {
uc *biz.SecurityUsecase
uc *system.SecurityUsecase
}
func NewSecurityService(uc *biz.SecurityUsecase) *SecurityService {
func NewSecurityService(uc *system.SecurityUsecase) *SecurityService {
return &SecurityService{uc: uc}
}
@@ -61,7 +60,7 @@ func (s *SecurityService) DeleteCaptcha(ctx context.Context, id string) error {
func (s *SecurityService) UseMultipoint() bool { return s.uc.UseMultipoint() }
func (s *SecurityService) CaptchaSettings() biz.CaptchaSettings {
func (s *SecurityService) CaptchaSettings() system.CaptchaSettings {
return s.uc.CaptchaRuntimeSettings()
}
+4 -5
View File
@@ -2,16 +2,15 @@ package service
import (
"context"
"kra/internal/biz"
"kra/internal/biz/system"
)
type SystemConfigService struct {
uc *biz.SystemConfigUsecase
settings biz.RuntimeSettings
uc *system.SystemConfigUsecase
settings system.RuntimeSettings
}
func NewSystemConfigService(uc *biz.SystemConfigUsecase, settings biz.RuntimeSettings) *SystemConfigService {
func NewSystemConfigService(uc *system.SystemConfigUsecase, settings system.RuntimeSettings) *SystemConfigService {
return &SystemConfigService{uc: uc, settings: settings}
}
+5 -5
View File
@@ -2,12 +2,12 @@ package service
import (
"context"
"kra/internal/biz/system"
"kra/internal/biz"
"kra/internal/service/dto"
)
func (s *SystemConfigService) Initialize(ctx context.Context, input *dto.DatabaseInitRequest, apis []*biz.API) error {
func (s *SystemConfigService) Initialize(ctx context.Context, input *dto.DatabaseInitRequest, apis []*system.API) error {
driver, config := input.DBType, ""
switch driver {
case "mysql":
@@ -21,15 +21,15 @@ func (s *SystemConfigService) Initialize(ctx context.Context, input *dto.Databas
driver = "mysql"
config = "charset=utf8mb4&parseTime=True&loc=Local"
}
return s.uc.Initialize(ctx, &biz.DatabaseConfig{Driver: driver, Host: input.Host, Port: input.Port, User: input.UserName, Password: input.Password, Name: input.DBName, Path: input.DBPath, Config: config, Template: input.Template, AdminPassword: input.AdminPassword, APIs: apis})
return s.uc.Initialize(ctx, &system.DatabaseConfig{Driver: driver, Host: input.Host, Port: input.Port, User: input.UserName, Password: input.Password, Name: input.DBName, Path: input.DBPath, Config: config, Template: input.Template, AdminPassword: input.AdminPassword, APIs: apis})
}
func (s *SystemConfigService) InitializeRoutes(ctx context.Context, input *dto.DatabaseInitRequest, routes []dto.Route) error {
apis := make([]*biz.API, 0, len(routes))
apis := make([]*system.API, 0, len(routes))
for _, route := range routes {
path := NormalizeRoutePath(route.Path, s.settings.RouterPrefix())
group, description := RouteMetadata(route.Method, path)
apis = append(apis, &biz.API{Path: path, Method: route.Method, APIGroup: group, Description: description})
apis = append(apis, &system.API{Path: path, Method: route.Method, APIGroup: group, Description: description})
}
return s.Initialize(ctx, input, apis)
}
+10 -10
View File
@@ -3,21 +3,21 @@ package service
import (
"context"
"encoding/json"
"kra/internal/biz/system"
"time"
"kra/internal/biz"
"kra/internal/service/dto"
)
type TaskService struct {
uc *biz.TaskApplicationUsecase
uc *system.TaskApplicationUsecase
}
func NewTaskService(uc *biz.TaskApplicationUsecase) *TaskService {
func NewTaskService(uc *system.TaskApplicationUsecase) *TaskService {
return &TaskService{uc: uc}
}
func taskDomain(v *dto.TaskRequest) *biz.TimedTask {
return &biz.TimedTask{ID: v.ID, Name: v.Name, Description: v.Description, Spec: v.Spec, WithSeconds: v.WithSeconds, ExecutorType: v.ExecutorType, MethodName: v.MethodName, Params: v.Params, HTTPURL: v.HTTPURL, HTTPMethod: v.HTTPMethod, HTTPHeader: v.HTTPHeader, HTTPBody: v.HTTPBody, HTTPAllowPrivate: v.HTTPAllowPrivate, Enabled: v.Enabled}
func taskDomain(v *dto.TaskRequest) *system.TimedTask {
return &system.TimedTask{ID: v.ID, Name: v.Name, Description: v.Description, Spec: v.Spec, WithSeconds: v.WithSeconds, ExecutorType: v.ExecutorType, MethodName: v.MethodName, Params: v.Params, HTTPURL: v.HTTPURL, HTTPMethod: v.HTTPMethod, HTTPHeader: v.HTTPHeader, HTTPBody: v.HTTPBody, HTTPAllowPrivate: v.HTTPAllowPrivate, Enabled: v.Enabled}
}
func (s *TaskService) CreateRequest(ctx context.Context, req *dto.TaskRequest) (uint, error) {
value := taskDomain(req)
@@ -30,12 +30,12 @@ func (s *TaskService) UpdateRequest(ctx context.Context, req *dto.TaskRequest) e
return s.Update(ctx, taskDomain(req))
}
func (s *TaskService) ListRequest(ctx context.Context, page, size int, name, executorType string, enabled *bool) ([]*dto.TaskResponse, int64, error) {
return s.Tasks(ctx, page, size, &biz.TimedTask{Name: name, ExecutorType: executorType, EnabledFilter: enabled})
return s.Tasks(ctx, page, size, &system.TimedTask{Name: name, ExecutorType: executorType, EnabledFilter: enabled})
}
func (s *TaskService) Create(ctx context.Context, v *biz.TimedTask) error {
func (s *TaskService) Create(ctx context.Context, v *system.TimedTask) error {
return s.uc.Create(ctx, v)
}
func (s *TaskService) Update(ctx context.Context, v *biz.TimedTask) error {
func (s *TaskService) Update(ctx context.Context, v *system.TimedTask) error {
return s.uc.Update(ctx, v)
}
func (s *TaskService) Delete(ctx context.Context, id uint) error {
@@ -44,10 +44,10 @@ func (s *TaskService) Delete(ctx context.Context, id uint) error {
func (s *TaskService) Toggle(ctx context.Context, id uint, enabled bool) error {
return s.uc.Toggle(ctx, id, enabled)
}
func taskDTO(v *biz.TimedTask, next *time.Time) *dto.TaskResponse {
func taskDTO(v *system.TimedTask, next *time.Time) *dto.TaskResponse {
return &dto.TaskResponse{ID: v.ID, CreatedAt: v.CreatedAt, UpdatedAt: v.UpdatedAt, DeletedAt: nil, Name: v.Name, Description: v.Description, Spec: v.Spec, WithSeconds: v.WithSeconds, ExecutorType: v.ExecutorType, MethodName: v.MethodName, Params: json.RawMessage(v.Params), HTTPURL: v.HTTPURL, HTTPMethod: v.HTTPMethod, HTTPHeader: json.RawMessage(v.HTTPHeader), HTTPBody: v.HTTPBody, HTTPAllowPrivate: v.HTTPAllowPrivate, Enabled: v.Enabled, NextRunAt: next}
}
func (s *TaskService) Tasks(ctx context.Context, page, size int, q *biz.TimedTask) ([]*dto.TaskResponse, int64, error) {
func (s *TaskService) Tasks(ctx context.Context, page, size int, q *system.TimedTask) ([]*dto.TaskResponse, int64, error) {
items, total, next, err := s.uc.List(ctx, page, size, q)
if err != nil {
return nil, 0, err
+8 -8
View File
@@ -2,8 +2,8 @@ package service
import (
"context"
"kra/internal/biz/system"
"kra/internal/biz"
"kra/internal/service/dto"
)
@@ -16,11 +16,11 @@ type userInput struct {
}
type UserService struct {
uc *biz.UserUsecase
uc *system.UserUsecase
settings *SecurityService
}
func NewUserService(uc *biz.UserUsecase, settings *SecurityService) *UserService {
func NewUserService(uc *system.UserUsecase, settings *SecurityService) *UserService {
return &UserService{uc: uc, settings: settings}
}
@@ -28,7 +28,7 @@ func userRequestInput(value *dto.UserRequest) userInput {
return userInput{ID: value.ID, Username: value.Username, Password: value.Password, NickName: value.NickName, HeaderImg: value.HeaderImg, AuthorityID: value.AuthorityID, AuthorityIDs: value.AuthorityIDs, Enable: value.Enable, Phone: value.Phone, Email: value.Email}
}
func (s *UserService) ListUsersRequest(ctx context.Context, value *dto.UserListRequest) ([]*dto.UserResponse, int64, error) {
return s.ListUsers(ctx, value.Page, value.PageSize, &biz.UserListFilter{Username: value.Username, NickName: value.NickName, Phone: value.Phone, Email: value.Email, OrderKey: value.OrderKey, Desc: value.Desc})
return s.ListUsers(ctx, value.Page, value.PageSize, &system.UserListFilter{Username: value.Username, NickName: value.NickName, Phone: value.Phone, Email: value.Email, OrderKey: value.OrderKey, Desc: value.Desc})
}
func (s *UserService) CreateUserRequest(ctx context.Context, value *dto.UserRequest) (*dto.UserResponse, error) {
return s.createUser(ctx, userRequestInput(value))
@@ -64,7 +64,7 @@ func (s *UserService) Menus(ctx context.Context, authorityID uint) ([]*dto.Dynam
return dynamicMenuResponses(menus), nil
}
func (s *UserService) ListUsers(ctx context.Context, page, pageSize int, filter *biz.UserListFilter) ([]*dto.UserResponse, int64, error) {
func (s *UserService) ListUsers(ctx context.Context, page, pageSize int, filter *system.UserListFilter) ([]*dto.UserResponse, int64, error) {
users, total, err := s.uc.ListUsers(ctx, page, pageSize, filter)
if err != nil {
return nil, 0, err
@@ -94,7 +94,7 @@ func (s *UserService) createUser(ctx context.Context, input userInput) (*dto.Use
}
security, _ := s.settings.CurrentSecurity(ctx)
mustChange := security != nil && security.ForceNewUserChangePassword
user, err := s.uc.CreateUser(ctx, &biz.User{Username: input.Username, Password: input.Password, NickName: input.NickName, HeaderImg: input.HeaderImg, AuthorityID: input.AuthorityID, Phone: input.Phone, Email: input.Email, Enable: input.Enable, MustChangePassword: mustChange}, input.AuthorityIDs)
user, err := s.uc.CreateUser(ctx, &system.User{Username: input.Username, Password: input.Password, NickName: input.NickName, HeaderImg: input.HeaderImg, AuthorityID: input.AuthorityID, Phone: input.Phone, Email: input.Email, Enable: input.Enable, MustChangePassword: mustChange}, input.AuthorityIDs)
if err != nil {
return nil, err
}
@@ -103,10 +103,10 @@ func (s *UserService) createUser(ctx context.Context, input userInput) (*dto.Use
func (s *UserService) updateUser(ctx context.Context, input userInput) error {
// The compatible ChangeUserInfo payload uses authorityIds for role assignment; the
// standalone authorityId field is not applied by setUserInfo.
return s.uc.UpdateUser(ctx, &biz.User{ID: input.ID, NickName: input.NickName, HeaderImg: input.HeaderImg, Phone: input.Phone, Email: input.Email, Enable: input.Enable}, input.AuthorityIDs)
return s.uc.UpdateUser(ctx, &system.User{ID: input.ID, NickName: input.NickName, HeaderImg: input.HeaderImg, Phone: input.Phone, Email: input.Email, Enable: input.Enable}, input.AuthorityIDs)
}
func (s *UserService) updateSelfUser(ctx context.Context, input userInput) error {
return s.uc.UpdateSelfUser(ctx, &biz.User{ID: input.ID, NickName: input.NickName, HeaderImg: input.HeaderImg, Phone: input.Phone, Email: input.Email, Enable: input.Enable})
return s.uc.UpdateSelfUser(ctx, &system.User{ID: input.ID, NickName: input.NickName, HeaderImg: input.HeaderImg, Phone: input.Phone, Email: input.Email, Enable: input.Enable})
}
func (s *UserService) DeleteUser(ctx context.Context, id uint) error {
return s.uc.DeleteUser(ctx, id)
+3 -3
View File
@@ -1,18 +1,18 @@
package service
import (
"kra/internal/biz"
"kra/internal/biz/system"
"kra/internal/service/dto"
)
func convertAuthority(value biz.Authority) *dto.AuthorityResponse {
func convertAuthority(value system.Authority) *dto.AuthorityResponse {
var menus []*dto.MenuResponse
if value.Menus != nil {
menus = menuResponses(value.Menus)
}
return &dto.AuthorityResponse{CreatedAt: value.CreatedAt, UpdatedAt: value.UpdatedAt, DeletedAt: value.DeletedAt, AuthorityID: value.AuthorityID, AuthorityName: value.AuthorityName, ParentID: value.ParentID, Children: nil, Menus: menus, DataScope: value.DataScope, DefaultRouter: value.DefaultRouter}
}
func convertUser(user *biz.User) *dto.UserResponse {
func convertUser(user *system.User) *dto.UserResponse {
var authorities []*dto.AuthorityResponse
if user.Authorities != nil {
authorities = make([]*dto.AuthorityResponse, 0, len(user.Authorities))
+19 -20
View File
@@ -3,15 +3,14 @@ package service
import (
"context"
"encoding/json"
"kra/internal/biz/system"
"kra/internal/service/dto"
"time"
"kra/internal/biz"
)
type VersionService struct{ uc *biz.VersionUsecase }
type VersionService struct{ uc *system.VersionUsecase }
func NewVersionService(uc *biz.VersionUsecase) *VersionService { return &VersionService{uc: uc} }
func NewVersionService(uc *system.VersionUsecase) *VersionService { return &VersionService{uc: uc} }
type versionExportInfo struct {
Name string `json:"name"`
@@ -103,7 +102,7 @@ type versionExportDocument struct {
Dictionaries []versionExportDictionary `json:"dictionaries"`
}
func exportMenu(value *biz.Menu) *versionExportMenu {
func exportMenu(value *system.Menu) *versionExportMenu {
menu := &versionExportMenu{
Path: value.Path, Name: value.Name, Hidden: value.Hidden, Component: value.Component, Sort: value.Sort,
Meta: dto.VersionMenuMetaRequest{ActiveName: value.ActiveName, KeepAlive: value.KeepAlive, DefaultMenu: value.DefaultMenu, Title: value.Title, Icon: value.Icon, CloseTab: value.CloseTab, TransitionType: value.TransitionType},
@@ -129,7 +128,7 @@ func exportMenu(value *biz.Menu) *versionExportMenu {
return menu
}
func versionDTO(v *biz.Version) *dto.VersionResponse {
func versionDTO(v *system.Version) *dto.VersionResponse {
return &dto.VersionResponse{ID: v.ID, CreatedAt: v.CreatedAt, UpdatedAt: v.UpdatedAt, DeletedAt: nil, VersionName: v.Name, VersionCode: v.Code, Description: v.Description, VersionData: v.Data}
}
@@ -213,23 +212,23 @@ func (s *VersionService) Export(ctx context.Context, name, code, description str
payload := versionExportDocument{Version: versionExportInfo{Name: name, Code: code, Description: description, ExportTime: bundle.ExportTime}, Menus: menus, APIs: apis, Dictionaries: dictionaries}
raw, err := json.MarshalIndent(payload, "", " ")
if err != nil {
return &biz.VersionStageError{Stage: biz.VersionStageJSON, Err: err}
return &system.VersionStageError{Stage: system.VersionStageJSON, Err: err}
}
if err = s.uc.CreateVersion(ctx, &biz.Version{Name: versionPointer(name), Code: versionPointer(code), Description: versionPointer(description), Data: versionPointer(string(raw))}); err != nil {
return &biz.VersionStageError{Stage: biz.VersionStageSave, Err: err}
if err = s.uc.CreateVersion(ctx, &system.Version{Name: versionPointer(name), Code: versionPointer(code), Description: versionPointer(description), Data: versionPointer(string(raw))}); err != nil {
return &system.VersionStageError{Stage: system.VersionStageSave, Err: err}
}
return nil
}
func (s *VersionService) Import(ctx context.Context, bundle *biz.VersionBundle) error {
func (s *VersionService) Import(ctx context.Context, bundle *system.VersionBundle) error {
return s.uc.ImportVersionBundle(ctx, bundle)
}
func versionMenuDomain(value dto.VersionMenuRequest) *biz.Menu {
menu := &biz.Menu{Path: value.Path, Name: value.Name, Hidden: value.Hidden, Component: value.Component, Sort: value.Sort, ActiveName: value.Meta.ActiveName, KeepAlive: value.Meta.KeepAlive, DefaultMenu: value.Meta.DefaultMenu, Title: value.Meta.Title, Icon: value.Meta.Icon, CloseTab: value.Meta.CloseTab, TransitionType: value.Meta.TransitionType}
func versionMenuDomain(value dto.VersionMenuRequest) *system.Menu {
menu := &system.Menu{Path: value.Path, Name: value.Name, Hidden: value.Hidden, Component: value.Component, Sort: value.Sort, ActiveName: value.Meta.ActiveName, KeepAlive: value.Meta.KeepAlive, DefaultMenu: value.Meta.DefaultMenu, Title: value.Meta.Title, Icon: value.Meta.Icon, CloseTab: value.Meta.CloseTab, TransitionType: value.Meta.TransitionType}
for _, button := range value.MenuButtons {
menu.Buttons = append(menu.Buttons, &biz.MenuButton{Name: button.Name, Description: button.Description})
menu.Buttons = append(menu.Buttons, &system.MenuButton{Name: button.Name, Description: button.Description})
}
for _, parameter := range value.Parameters {
menu.Parameters = append(menu.Parameters, &biz.MenuParameter{Type: parameter.Type, Key: parameter.Key, Value: parameter.Value})
menu.Parameters = append(menu.Parameters, &system.MenuParameter{Type: parameter.Type, Key: parameter.Key, Value: parameter.Value})
}
for _, child := range value.Children {
menu.Children = append(menu.Children, versionMenuDomain(child))
@@ -238,19 +237,19 @@ func versionMenuDomain(value dto.VersionMenuRequest) *biz.Menu {
}
func (s *VersionService) ImportRequest(ctx context.Context, req *dto.ImportVersionRequest) error {
if req.Version.Name == "" || req.Version.Code == "" {
return biz.ErrInvalidVersion
return system.ErrInvalidVersion
}
bundle := &biz.VersionBundle{Name: req.Version.Name, Code: req.Version.Code, Description: req.Version.Description, ExportTime: req.Version.ExportTime}
bundle := &system.VersionBundle{Name: req.Version.Name, Code: req.Version.Code, Description: req.Version.Description, ExportTime: req.Version.ExportTime}
for _, menu := range req.Menus {
bundle.Menus = append(bundle.Menus, versionMenuDomain(menu))
}
for _, api := range req.APIs {
bundle.APIs = append(bundle.APIs, &biz.API{Path: api.Path, Description: api.Description, APIGroup: api.APIGroup, Method: api.Method})
bundle.APIs = append(bundle.APIs, &system.API{Path: api.Path, Description: api.Description, APIGroup: api.APIGroup, Method: api.Method})
}
for _, dictionary := range req.Dictionaries {
item := &biz.Dictionary{Name: dictionary.Name, Type: dictionary.Type, Status: dictionary.Status, Desc: dictionary.Description}
item := &system.Dictionary{Name: dictionary.Name, Type: dictionary.Type, Status: dictionary.Status, Desc: dictionary.Description}
for _, detail := range dictionary.Details {
item.Details = append(item.Details, &biz.DictionaryDetail{Label: detail.Label, Value: detail.Value, Extend: detail.Extend, Status: detail.Status, Sort: detail.Sort, ParentID: detail.ParentID, Level: detail.Level, Path: detail.Path})
item.Details = append(item.Details, &system.DictionaryDetail{Label: detail.Label, Value: detail.Value, Extend: detail.Extend, Status: detail.Status, Sort: detail.Sort, ParentID: detail.ParentID, Level: detail.Level, Path: detail.Path})
}
bundle.Dictionaries = append(bundle.Dictionaries, item)
}
@@ -258,7 +257,7 @@ func (s *VersionService) ImportRequest(ctx context.Context, req *dto.ImportVersi
return err
}
raw, _ := json.Marshal(req)
_ = s.uc.CreateVersion(ctx, &biz.Version{
_ = s.uc.CreateVersion(ctx, &system.Version{
Name: versionPointer(req.Version.Name),
Code: versionPointer(req.Version.Code + "_imported_" + time.Now().Format("20060102150405")),
Description: versionPointer("导入版本: " + req.Version.Description),