From 6aeb3f068d8aa2d9770761f0596616b71d0067df Mon Sep 17 00:00:00 2001 From: wangfuduo Date: Fri, 3 Jul 2026 17:42:34 +0800 Subject: [PATCH] feat: model and dao --- app/common/dao/pkg.go | 87 ++++++++++++++++++++++++++++++++++++ app/common/dao/user_pkg.go | 68 ++++++++++++++++++++++++++++ app/common/model/pkg.go | 17 +++++++ app/common/model/user_pkg.go | 15 +++++++ 4 files changed, 187 insertions(+) create mode 100644 app/common/dao/pkg.go create mode 100644 app/common/dao/user_pkg.go create mode 100644 app/common/model/pkg.go create mode 100644 app/common/model/user_pkg.go diff --git a/app/common/dao/pkg.go b/app/common/dao/pkg.go new file mode 100644 index 0000000..75ef8ad --- /dev/null +++ b/app/common/dao/pkg.go @@ -0,0 +1,87 @@ +package dao + +import ( + "errors" + "twin-api/app/common/model" + "twin-api/base/global" + + "gorm.io/gorm" +) + +type Pkg struct { + db *gorm.DB +} + +func NewPackage() *Pkg { + return &Pkg{ + db: global.GetDB(), + } +} + +func (p *Pkg) TableName() string { + return "tw_package" +} + +func (p *Pkg) Create(m *model.Pkg) error { + return p.db.Table(p.TableName()).Create(m).Error +} + +func (p *Pkg) Update(m *model.Pkg) error { + return p.db.Table(p.TableName()).Save(m).Error +} + +func (p *Pkg) Delete(m *model.Pkg) error { + return p.db.Table(p.TableName()).Where("id = ?", m.Id).Update("status", model.PkgDelete).Error +} + +func (p *Pkg) Get(id int64) (*model.Pkg, error) { + var res model.Pkg + if err := p.db.Table(p.TableName()).Where("id = ?", id).First(&res).Error; err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + return nil, nil + } + return nil, err + } + + return &res, nil +} + +func (p *Pkg) GetByPkgName(name string) (*model.Pkg, error) { + var res model.Pkg + tx := p.db.Table(p.TableName()) + if name != "" { + tx = tx.Where("name = ?", name) + } + tx.Order("id desc") + if err := tx.First(&res).Error; err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + return nil, nil + } + return nil, err + } + return &res, nil +} + +func (p *Pkg) Query(pkgName, version string, status, page, size int, sort string) ([]*model.Pkg, int64, error) { + var res []*model.Pkg + var count int64 + tx := p.db.Table(p.TableName()) + if pkgName != "" { + tx = tx.Where("name = ?", pkgName) + } + if version != "" { + tx = tx.Where("version = ?", version) + } + if status != 0 { + tx = tx.Where("status = ?", status) + } + if err := tx.Count(&count).Error; err != nil { + return nil, 0, err + } + + if err := tx.Limit(size).Offset((page - 1) * size).Find(&res).Error; err != nil { + return nil, 0, err + } + + return res, count, nil +} diff --git a/app/common/dao/user_pkg.go b/app/common/dao/user_pkg.go new file mode 100644 index 0000000..a009432 --- /dev/null +++ b/app/common/dao/user_pkg.go @@ -0,0 +1,68 @@ +package dao + +import ( + "errors" + "fmt" + "twin-api/app/common/model" + "twin-api/base/global" + + "gorm.io/gorm" +) + +type UserPkg struct { + db *gorm.DB +} + +func NewUserPkg() *UserPkg { + return &UserPkg{ + db: global.GetDB(), + } +} + +func (p *UserPkg) TableName() string { + return "tw_user_package" +} + +func (p *UserPkg) Create(m *model.UserPkg) error { + return p.db.Table(p.TableName()).Create(m).Error +} + +func (p *UserPkg) Update(m *model.UserPkg) error { + return p.db.Table(p.TableName()).Save(m).Error +} + +func (p *UserPkg) Delete(m *model.UserPkg) error { + return nil +} + +func (p *UserPkg) Get(id, userId int64) (*model.UserPkg, error) { + var res model.UserPkg + if err := p.db.Table(p.TableName()).Where("id = ? AND user_id = ?", id, userId).First(&res).Error; err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + return nil, nil + } + return nil, err + } + + return &res, nil +} + +func (p *UserPkg) GetByUserId(userId int64) (*model.UserPkgInfo, error) { + var res model.UserPkgInfo + tx := p.db.Table(p.TableName() + " u ") + tx = tx.Joins(fmt.Sprintf(" JOIN %s p ON u.id = p.user_id", NewPackage().TableName())) + tx = tx.Where("u.user_id = ?", userId) + tx = tx.Order("u.id desc") + if err := tx.Select("u.*,p.*").First(&res).Error; err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + return nil, nil + } + + return nil, err + } + return &res, nil +} + +func (p *UserPkg) Query(...any) (any, error) { + panic("implement me") +} diff --git a/app/common/model/pkg.go b/app/common/model/pkg.go new file mode 100644 index 0000000..e0a21aa --- /dev/null +++ b/app/common/model/pkg.go @@ -0,0 +1,17 @@ +package model + +type Pkg struct { + Id int64 + ExpireTime int64 + CreateTime int64 + UpdateTime int64 + Status int64 + Name string + Version string + Link string +} + +const ( + PkgNormal = 1 + PkgDelete = 2 +) diff --git a/app/common/model/user_pkg.go b/app/common/model/user_pkg.go new file mode 100644 index 0000000..4bc325c --- /dev/null +++ b/app/common/model/user_pkg.go @@ -0,0 +1,15 @@ +package model + +type UserPkg struct { + Id int64 + UserId int64 + PackageId int64 + CreateTime int64 + UpdateTime int64 + Extra string +} + +type UserPkgInfo struct { + UserPkg + Pkg +}