vendor_meta.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package model
  2. import (
  3. "one-api/common"
  4. "gorm.io/gorm"
  5. )
  6. // Vendor 用于存储供应商信息,供模型引用
  7. // Name 唯一,用于在模型中关联
  8. // Icon 采用 @lobehub/icons 的图标名,前端可直接渲染
  9. // Status 预留字段,1 表示启用
  10. // 本表同样遵循 3NF 设计范式
  11. type Vendor struct {
  12. Id int `json:"id"`
  13. Name string `json:"name" gorm:"size:128;not null;uniqueIndex:uk_vendor_name,where:deleted_at IS NULL"`
  14. Description string `json:"description,omitempty" gorm:"type:text"`
  15. Icon string `json:"icon,omitempty" gorm:"type:varchar(128)"`
  16. Status int `json:"status" gorm:"default:1"`
  17. CreatedTime int64 `json:"created_time" gorm:"bigint"`
  18. UpdatedTime int64 `json:"updated_time" gorm:"bigint"`
  19. DeletedAt gorm.DeletedAt `json:"-" gorm:"index"`
  20. }
  21. // Insert 创建新的供应商记录
  22. func (v *Vendor) Insert() error {
  23. now := common.GetTimestamp()
  24. v.CreatedTime = now
  25. v.UpdatedTime = now
  26. return DB.Create(v).Error
  27. }
  28. // Update 更新供应商记录
  29. func (v *Vendor) Update() error {
  30. v.UpdatedTime = common.GetTimestamp()
  31. return DB.Save(v).Error
  32. }
  33. // Delete 软删除供应商
  34. func (v *Vendor) Delete() error {
  35. return DB.Delete(v).Error
  36. }
  37. // GetVendorByID 根据 ID 获取供应商
  38. func GetVendorByID(id int) (*Vendor, error) {
  39. var v Vendor
  40. err := DB.First(&v, id).Error
  41. if err != nil {
  42. return nil, err
  43. }
  44. return &v, nil
  45. }
  46. // GetAllVendors 获取全部供应商(分页)
  47. func GetAllVendors(offset int, limit int) ([]*Vendor, error) {
  48. var vendors []*Vendor
  49. err := DB.Offset(offset).Limit(limit).Find(&vendors).Error
  50. return vendors, err
  51. }
  52. // SearchVendors 按关键字搜索供应商
  53. func SearchVendors(keyword string, offset int, limit int) ([]*Vendor, int64, error) {
  54. db := DB.Model(&Vendor{})
  55. if keyword != "" {
  56. like := "%" + keyword + "%"
  57. db = db.Where("name LIKE ? OR description LIKE ?", like, like)
  58. }
  59. var total int64
  60. if err := db.Count(&total).Error; err != nil {
  61. return nil, 0, err
  62. }
  63. var vendors []*Vendor
  64. if err := db.Offset(offset).Limit(limit).Order("id DESC").Find(&vendors).Error; err != nil {
  65. return nil, 0, err
  66. }
  67. return vendors, total, nil
  68. }