package expiry import ( "time" "github.com/gin-gonic/gin" "github.com/redis/go-redis/v9" "gorm.io/gorm" expiryhandler "wx_service/internal/expiry/handler" expirymodel "wx_service/internal/expiry/model" expiryrepo "wx_service/internal/expiry/repository" expiryservice "wx_service/internal/expiry/service" ) const ( CategoryFood = expirymodel.CategoryFood CategoryMedicine = expirymodel.CategoryMedicine CategoryCosmetic = expirymodel.CategoryCosmetic CategoryOther = expirymodel.CategoryOther StatusNormal = expirymodel.StatusNormal StatusExpiring = expirymodel.StatusExpiring StatusExpired = expirymodel.StatusExpired StatusUsed = expirymodel.StatusUsed StatusDiscarded = expirymodel.StatusDiscarded ) var defaultRemindDays = expirymodel.DefaultRemindDays type ExpiryItem = expirymodel.ExpiryItem type ExpiryUserSettings = expirymodel.ExpiryUserSettings type Repository = expiryrepo.Repository type Service = expiryservice.Service type Handler = expiryhandler.Handler type SummaryCache = expiryservice.SummaryCache type CreateItemRequest = expiryservice.CreateItemRequest type UpdateItemRequest = expiryservice.UpdateItemRequest type ItemFilters = expiryservice.ItemFilters type ItemView = expiryservice.ItemView type ItemListResponse = expiryservice.ItemListResponse type SummaryResponse = expiryservice.SummaryResponse type SettingsResponse = expiryservice.SettingsResponse var ( ErrExpiryItemNotFound = expiryrepo.ErrExpiryItemNotFound ErrExpiryNameInvalid = expiryservice.ErrExpiryNameInvalid ErrExpiryCategoryInvalid = expiryservice.ErrExpiryCategoryInvalid ErrExpiryMiniProgramRequired = expiryservice.ErrExpiryMiniProgramRequired ErrExpiryQuantityInvalid = expiryservice.ErrExpiryQuantityInvalid ErrExpiryLocationTooLong = expiryservice.ErrExpiryLocationTooLong ErrExpiryRemarkTooLong = expiryservice.ErrExpiryRemarkTooLong ErrExpiryDateRequired = expiryservice.ErrExpiryDateRequired ErrExpiryShelfLifeDaysInvalid = expiryservice.ErrExpiryShelfLifeDaysInvalid ErrExpiryFilterStatusInvalid = expiryservice.ErrExpiryFilterStatusInvalid ErrExpiryFilterCategoryInvalid = expiryservice.ErrExpiryFilterCategoryInvalid ErrExpiryFilterSortInvalid = expiryservice.ErrExpiryFilterSortInvalid ErrExpiryStatusInvalid = expiryservice.ErrExpiryStatusInvalid ErrExpiryRemindDaysInvalid = expiryservice.ErrExpiryRemindDaysInvalid ) func NewRepository(db *gorm.DB) *Repository { return expiryrepo.NewRepository(db) } func NewService(repo *Repository) *Service { return expiryservice.NewService(repo) } func NewHandler(service *Service) *Handler { return expiryhandler.NewHandler(service) } func NewSummaryCache(rc *redis.Client, keyPrefix string, ttl time.Duration) *SummaryCache { return expiryservice.NewSummaryCache(rc, keyPrefix, ttl) } func dateOnly(t time.Time) time.Time { return expirymodel.DateOnly(t) } func normalizeFilters(filters ItemFilters) ItemFilters { return expiryservice.NormalizeFilters(filters) } func validateFilters(filters ItemFilters) error { return expiryservice.ValidateFilters(filters) } func validateBaseFields(name, category string, quantity int, location, remark string) error { return expiryservice.ValidateBaseFields(name, category, quantity, location, remark) } func applyExpiryDate(item *ExpiryItem, expiryDate *time.Time, shelfLifeDays *int) error { return expiryservice.ApplyExpiryDate(item, expiryDate, shelfLifeDays) } func isValidCategory(category string) bool { return expiryservice.IsValidCategory(category) } func validateRemindDays(days []int) ([]int, error) { return expiryservice.ValidateRemindDays(days) } func toItemView(item ExpiryItem) ItemView { return expiryservice.ToItemView(item) } func writeExpirySuccess(c *gin.Context, message string, data interface{}) { resp := gin.H{ "code": 0, "message": message, } if data != nil { resp["data"] = data } c.JSON(200, resp) } func writeExpiryError(c *gin.Context, code int, message string) { c.JSON(code, gin.H{ "code": code, "message": message, }) } func writeExpiryServerError(c *gin.Context) { writeExpiryError(c, 500, "服务器错误") }