134 lines
4.1 KiB
Go
134 lines
4.1 KiB
Go
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, "服务器错误")
|
|
}
|