package persona import ( "context" domusecase "haixun-backend/internal/model/persona/domain/usecase" "haixun-backend/internal/svc" "haixun-backend/internal/types" ) type ListPersonasLogic struct { ctx context.Context svcCtx *svc.ServiceContext } func NewListPersonasLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ListPersonasLogic { return &ListPersonasLogic{ctx: ctx, svcCtx: svcCtx} } func (l *ListPersonasLogic) ListPersonas() (*types.ListPersonasData, error) { tenantID, uid, err := actorFrom(l.ctx) if err != nil { return nil, err } result, err := l.svcCtx.Persona.List(l.ctx, tenantID, uid) if err != nil { return nil, err } return toListData(result), nil } type CreatePersonaLogic struct { ctx context.Context svcCtx *svc.ServiceContext } func NewCreatePersonaLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreatePersonaLogic { return &CreatePersonaLogic{ctx: ctx, svcCtx: svcCtx} } func (l *CreatePersonaLogic) CreatePersona(req *types.CreatePersonaReq) (*types.PersonaData, error) { tenantID, uid, err := actorFrom(l.ctx) if err != nil { return nil, err } displayName := "" if req != nil { displayName = req.DisplayName } item, err := l.svcCtx.Persona.Create(l.ctx, domusecase.CreateRequest{ TenantID: tenantID, OwnerUID: uid, DisplayName: displayName, }) if err != nil { return nil, err } out := toPersonaData(*item) return &out, nil } type GetPersonaLogic struct { ctx context.Context svcCtx *svc.ServiceContext } func NewGetPersonaLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetPersonaLogic { return &GetPersonaLogic{ctx: ctx, svcCtx: svcCtx} } func (l *GetPersonaLogic) GetPersona(req *types.PersonaPath) (*types.PersonaData, error) { tenantID, uid, err := actorFrom(l.ctx) if err != nil { return nil, err } item, err := l.svcCtx.Persona.Get(l.ctx, tenantID, uid, req.ID) if err != nil { return nil, err } out := toPersonaData(*item) return &out, nil } type UpdatePersonaLogic struct { ctx context.Context svcCtx *svc.ServiceContext } func NewUpdatePersonaLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UpdatePersonaLogic { return &UpdatePersonaLogic{ctx: ctx, svcCtx: svcCtx} } type DeletePersonaLogic struct { ctx context.Context svcCtx *svc.ServiceContext } func NewDeletePersonaLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DeletePersonaLogic { return &DeletePersonaLogic{ctx: ctx, svcCtx: svcCtx} } func (l *DeletePersonaLogic) DeletePersona(req *types.PersonaPath) error { tenantID, uid, err := actorFrom(l.ctx) if err != nil { return err } return l.svcCtx.Persona.Delete(l.ctx, tenantID, uid, req.ID) } func (l *UpdatePersonaLogic) UpdatePersona(req *types.PersonaPath, body *types.UpdatePersonaReq) (*types.PersonaData, error) { tenantID, uid, err := actorFrom(l.ctx) if err != nil { return nil, err } item, err := l.svcCtx.Persona.Update(l.ctx, domusecase.UpdateRequest{ TenantID: tenantID, OwnerUID: uid, PersonaID: req.ID, Patch: toPersonaPatch(body), }) if err != nil { return nil, err } out := toPersonaData(*item) return &out, nil }