- 新增关注系统:UserFollow 模型、FollowService(toggle/status/列表隐私控制) - User 新增 FollowersCount/FollowingCount/FollowListPublic/NotifyPrefs 字段 - Space 页面增加四态关注按钮(关注/已关注/回关/已互粉)+ 粉丝/关注数链接 - 新增 /space/:uid/followers 和 /space/:uid/following 列表页 - 新增 NotifyFollow/NotifyLikeAggregated 通知类型 - ReactionService 点赞时写入 daily_like_summary,访问时生成聚合通知 - FollowService 关注时触发 NotifyFollow 通知 - 消息中心侧边栏升级为分类 TAB(全部/系统通知/@艾特/点赞/关注) - NotificationService 新增 ListByCategory 按分类分页查询
122 lines
5.1 KiB
Go
122 lines
5.1 KiB
Go
package controller
|
||
|
||
import (
|
||
"metazone.cc/metalab/internal/middleware"
|
||
"metazone.cc/metalab/internal/model"
|
||
"metazone.cc/metalab/internal/service"
|
||
"metazone.cc/metalab/internal/session"
|
||
)
|
||
|
||
// authUseCase AuthController 对 AuthService 的最小依赖(ISP:5 个方法)
|
||
// 注意:Login/Register/ConfirmRestore 不再返回 JWT,session 由 controller 通过 SessionManager 创建
|
||
type authUseCase interface {
|
||
Register(req model.RegisterRequest, regIP string) (*model.User, error)
|
||
Login(req model.LoginRequest, loginIP string) (*model.User, error)
|
||
ConfirmRestore(req model.LoginRequest, loginIP string) (*model.User, error)
|
||
CheckEmail(email string) (bool, error)
|
||
IsRegistrationEnabled() bool
|
||
}
|
||
|
||
// rateLimiter AuthController 对 RateLimiter 的最小依赖(ISP:4 个方法)
|
||
type rateLimiter interface {
|
||
AllowAccount(email string) middleware.RateLimitResult
|
||
AllowIP(ip string) middleware.RateLimitResult
|
||
Clear(email, ip string)
|
||
ClearIP(ipKey string)
|
||
}
|
||
|
||
// postUseCase PostController 对 PostService 的最小依赖(ISP:7 个方法)
|
||
type postUseCase interface {
|
||
Create(userID uint, title, body string) (*model.Post, error)
|
||
GetByID(id uint) (*model.Post, error)
|
||
List(keyword string, page, pageSize int) ([]model.Post, int64, error)
|
||
Update(postID uint, title, body string) error
|
||
Delete(postID uint) error
|
||
SubmitForAudit(postID uint) error
|
||
IsPostAccessible(userID uint, role string, postUserID uint) bool
|
||
}
|
||
|
||
// studioUseCase StudioController 对 PostService 的最小依赖(ISP:8 个方法)
|
||
type studioUseCase interface {
|
||
Create(userID uint, title, body string) (*model.Post, error)
|
||
GetByID(id uint) (*model.Post, error)
|
||
Update(postID uint, title, body string) error
|
||
Delete(postID uint) error
|
||
SubmitForAudit(postID uint) error
|
||
ListByUser(userID uint, status string, page, pageSize int) ([]model.Post, int64, error)
|
||
GetOverview(userID uint) (*service.StudioOverview, error)
|
||
IsPostAccessible(userID uint, role string, postUserID uint) bool
|
||
}
|
||
|
||
// spaceUseCase SpaceController 对 SpaceService 的最小依赖(ISP:2 个方法)
|
||
type spaceUseCase interface {
|
||
GetSpaceUser(uid uint) (*model.User, error)
|
||
GetPostsByUser(uid uint, page, pageSize int) ([]model.Post, int64, error)
|
||
}
|
||
|
||
// sessionManager 登录管理对会话管理的最小依赖(ISP:4 个方法)
|
||
type sessionManager interface {
|
||
ListByUID(uid uint) ([]*session.Session, error)
|
||
Destroy(sid string) error
|
||
DestroyOtherByUID(uid uint, currentSID string) error
|
||
UpdateRemark(sid string, uid uint, remark string) error
|
||
}
|
||
|
||
// levelUseCase LevelController 对 LevelService 的最小依赖
|
||
type levelUseCase interface {
|
||
CheckIn(userID uint) (checkedIn bool, newExp int, levelUp bool, err error)
|
||
GetLevel(userID uint) (level int, exp int, checkedIn bool, err error)
|
||
CompleteTask(userID uint, taskType string) (newExp int, levelUp bool, err error)
|
||
}
|
||
|
||
// energyUseCase EnergyController 对 EnergyService 的最小依赖(ISP:3 个方法)
|
||
type energyUseCase interface {
|
||
Energize(energizerID uint, postID uint, amount int) (int, error)
|
||
GetEnergyInfo(userID uint) (*service.EnergyInfo, error)
|
||
GetEnergyLogs(userID uint, days, page, pageSize int) ([]model.EnergyLog, int64, error)
|
||
}
|
||
|
||
// energyDeducter 删稿/改名时域能扣减接口(ISP)
|
||
type energyDeducter interface {
|
||
DeductOnDeletePost(authorUserID uint, postID uint) error
|
||
}
|
||
|
||
// energyRenameHandler 改名域能操作接口(ISP)
|
||
type energyRenameHandler interface {
|
||
DeductOnRename(userID uint) error
|
||
}
|
||
|
||
// energyAdminUseCase AdminEnergyController 对 EnergyService 的依赖(ISP:4 个方法)
|
||
type energyAdminUseCase interface {
|
||
AdminAdjust(operatorUID uint, userIDs []uint, amount int, description string, mode string) error
|
||
GetAdminEnergyLogs(energyType string, page, pageSize int) ([]model.EnergyLog, int64, error)
|
||
GetFundBalance() (int, error)
|
||
GetFundLogs(logType string, page, pageSize int) ([]model.FundLog, int64, error)
|
||
}
|
||
|
||
// commentUseCase CommentController 对 CommentService 的最小依赖(ISP:6 个方法)
|
||
type commentUseCase interface {
|
||
CreateRoot(userID, postID uint, body string) (*model.Comment, error)
|
||
CreateReply(userID, parentID uint, body string) (*model.Comment, error)
|
||
Delete(commentID uint, requesterID uint, isAdmin bool) error
|
||
ListRootComments(postID uint, page, pageSize int) ([]model.Comment, int64, error)
|
||
ListReplies(rootID uint) ([]model.Comment, error)
|
||
SearchUsers(keyword string) ([]model.UserSearchResult, error)
|
||
}
|
||
|
||
// reactionUseCase ReactionController 对 ReactionService 的最小依赖(ISP:4 个方法)
|
||
type reactionUseCase interface {
|
||
ToggleLike(userID, postID uint) (bool, error)
|
||
ToggleDislike(userID, postID uint) (bool, error)
|
||
GetReaction(userID, postID uint) (service.ReactionType, error)
|
||
GetPostLikesCount(postID uint) (int, error)
|
||
}
|
||
|
||
// followUseCase FollowController 对 FollowService 的最小依赖(ISP:4 个方法)
|
||
type followUseCase interface {
|
||
Toggle(followerID, followeeID uint) (bool, error)
|
||
GetStatus(currentUserID, targetUserID uint) (*service.FollowStatus, error)
|
||
ListFollowers(userID, currentUserID uint, page, pageSize int) (*service.FollowListResult, error)
|
||
ListFollowing(userID, currentUserID uint, page, pageSize int) (*service.FollowListResult, error)
|
||
}
|