73 lines
3.7 KiB
Go
73 lines
3.7 KiB
Go
package service
|
|
|
|
//go:generate mockgen -source=service.go -destination=mock/mock_service.go -package=mock
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
"mime/multipart"
|
|
|
|
"tss-rocks-be/ent"
|
|
"tss-rocks-be/internal/storage"
|
|
"tss-rocks-be/internal/types"
|
|
)
|
|
|
|
// Service interface defines all business logic operations
|
|
type Service interface {
|
|
// User operations
|
|
CreateUser(ctx context.Context, username, email, password string, role string) (*ent.User, error)
|
|
GetUser(ctx context.Context, id int) (*ent.User, error)
|
|
GetUserByUsername(ctx context.Context, username string) (*ent.User, error)
|
|
GetUserByEmail(ctx context.Context, email string) (*ent.User, error)
|
|
ValidatePassword(ctx context.Context, user *ent.User, password string) bool
|
|
VerifyPassword(ctx context.Context, userID int, password string) error
|
|
UpdateUser(ctx context.Context, userID int, input *types.UpdateUserInput) (*ent.User, error)
|
|
DeleteUser(ctx context.Context, userID int) error
|
|
ListUsers(ctx context.Context, params *types.ListUsersParams) ([]*ent.User, error)
|
|
GetUserRoles(ctx context.Context, userID int) ([]*ent.Role, error)
|
|
|
|
// Category operations
|
|
CreateCategory(ctx context.Context) (*ent.Category, error)
|
|
AddCategoryContent(ctx context.Context, categoryID int, langCode, name, description, slug string) (*ent.CategoryContent, error)
|
|
GetCategoryBySlug(ctx context.Context, langCode, slug string) (*ent.Category, error)
|
|
ListCategories(ctx context.Context, langCode string) ([]*ent.Category, error)
|
|
GetCategories(ctx context.Context, langCode string) ([]*ent.Category, error)
|
|
|
|
// Post operations
|
|
CreatePost(ctx context.Context, status string) (*ent.Post, error)
|
|
AddPostContent(ctx context.Context, postID int, langCode, title, content, summary string, metaKeywords, metaDescription string) (*ent.PostContent, error)
|
|
GetPostBySlug(ctx context.Context, langCode, slug string) (*ent.Post, error)
|
|
ListPosts(ctx context.Context, langCode string, categoryID *int, limit, offset int) ([]*ent.Post, error)
|
|
|
|
// Media operations
|
|
ListMedia(ctx context.Context, limit, offset int) ([]*ent.Media, error)
|
|
Upload(ctx context.Context, file *multipart.FileHeader, userID int) (*ent.Media, error)
|
|
GetMedia(ctx context.Context, id int) (*ent.Media, error)
|
|
GetFile(ctx context.Context, id int) (io.ReadCloser, *storage.FileInfo, error)
|
|
DeleteMedia(ctx context.Context, id int, userID int) error
|
|
|
|
// Contributor operations
|
|
CreateContributor(ctx context.Context, name string, avatarURL, bio *string) (*ent.Contributor, error)
|
|
AddContributorSocialLink(ctx context.Context, contributorID int, linkType, name, value string) (*ent.ContributorSocialLink, error)
|
|
GetContributorByID(ctx context.Context, id int) (*ent.Contributor, error)
|
|
ListContributors(ctx context.Context) ([]*ent.Contributor, error)
|
|
|
|
// Daily operations
|
|
CreateDaily(ctx context.Context, id string, categoryID int, imageURL string) (*ent.Daily, error)
|
|
AddDailyContent(ctx context.Context, dailyID string, langCode, quote string) (*ent.DailyContent, error)
|
|
GetDailyByID(ctx context.Context, id string) (*ent.Daily, error)
|
|
ListDailies(ctx context.Context, langCode string, categoryID *int, limit, offset int) ([]*ent.Daily, error)
|
|
|
|
// RBAC operations
|
|
InitializeRBAC(ctx context.Context) error
|
|
AssignRole(ctx context.Context, userID int, role string) error
|
|
RemoveRole(ctx context.Context, userID int, role string) error
|
|
HasPermission(ctx context.Context, userID int, permission string) (bool, error)
|
|
|
|
// Token blacklist
|
|
GetTokenBlacklist() *TokenBlacklist
|
|
|
|
// Generic operations
|
|
Delete(ctx context.Context, id int, currentUserID int) error
|
|
DeleteDaily(ctx context.Context, id string, currentUserID int) error
|
|
}
|