This commit is contained in:
ljw
2024-09-13 15:57:29 +08:00
commit c53df223d1
112 changed files with 14353 additions and 0 deletions

109
service/addressBook.go Normal file
View File

@@ -0,0 +1,109 @@
package service
import (
"Gwen/global"
"Gwen/model"
"gorm.io/gorm"
)
type AddressBookService struct {
}
func (s *AddressBookService) Info(id uint) *model.AddressBook {
p := &model.AddressBook{}
global.DB.Where("id = ?", id).First(p)
return p
}
func (s *AddressBookService) InfoByRowId(id uint) *model.AddressBook {
p := &model.AddressBook{}
global.DB.Where("row_id = ?", id).First(p)
return p
}
func (s *AddressBookService) ListByUserId(userId, page, pageSize uint) (res *model.AddressBookList) {
res = s.List(page, pageSize, func(tx *gorm.DB) {
tx.Where("user_id = ?", userId)
})
return
}
func (s *AddressBookService) ListByUserIds(userIds []uint, page, pageSize uint) (res *model.AddressBookList) {
res = s.List(page, pageSize, func(tx *gorm.DB) {
tx.Where("user_id in (?)", userIds)
})
return
}
// AddAddressBook
func (s *AddressBookService) AddAddressBook(ab *model.AddressBook) error {
return global.DB.Create(ab).Error
}
// UpdateAddressBook
func (s *AddressBookService) UpdateAddressBook(abs []*model.AddressBook, userId uint) error {
//比较peers和数据库中的数据如果peers中的数据在数据库中不存在则添加如果存在则更新如果数据库中的数据在peers中不存在则删除
// 开始事务
tx := global.DB.Begin()
//1. 获取数据库中的数据
var dbABs []*model.AddressBook
tx.Where("user_id = ?", userId).Find(&dbABs)
//2. 比较peers和数据库中的数据
//2.1 获取peers中的id
aBIds := make(map[string]*model.AddressBook)
for _, ab := range abs {
aBIds[ab.Id] = ab
}
//2.2 获取数据库中的id
dbABIds := make(map[string]*model.AddressBook)
for _, dbAb := range dbABs {
dbABIds[dbAb.Id] = dbAb
}
//2.3 比较peers和数据库中的数据
for id, ab := range aBIds {
dbAB, ok := dbABIds[id]
ab.UserId = userId
if !ok {
//添加
tx.Create(ab)
} else {
//更新
tx.Model(&model.AddressBook{}).Where("row_id = ?", dbAB.RowId).Updates(ab)
}
}
//2.4 删除
for id, dbAB := range dbABIds {
_, ok := aBIds[id]
if !ok {
tx.Delete(dbAB)
}
}
tx.Commit()
return nil
}
func (t *AddressBookService) List(page, pageSize uint, where func(tx *gorm.DB)) (res *model.AddressBookList) {
res = &model.AddressBookList{}
res.Page = int64(page)
res.PageSize = int64(pageSize)
tx := global.DB.Model(&model.AddressBook{})
if where != nil {
where(tx)
}
tx.Count(&res.Total)
tx.Scopes(Paginate(page, pageSize))
tx.Find(&res.AddressBooks)
return
}
// Create 创建
func (t *AddressBookService) Create(u *model.AddressBook) error {
res := global.DB.Create(u).Error
return res
}
func (t *AddressBookService) Delete(u *model.AddressBook) error {
return global.DB.Delete(u).Error
}
// Update 更新
func (t *AddressBookService) Update(u *model.AddressBook) error {
return global.DB.Model(u).Updates(u).Error
}

45
service/group.go Normal file
View File

@@ -0,0 +1,45 @@
package service
import (
"Gwen/global"
"Gwen/model"
"gorm.io/gorm"
)
type GroupService struct {
}
// InfoById 根据用户id取用户信息
func (us *GroupService) InfoById(id uint) *model.Group {
u := &model.Group{}
global.DB.Where("id = ?", id).First(u)
return u
}
func (us *GroupService) List(page, pageSize uint, where func(tx *gorm.DB)) (res *model.GroupList) {
res = &model.GroupList{}
res.Page = int64(page)
res.PageSize = int64(pageSize)
tx := global.DB.Model(&model.Group{})
if where != nil {
where(tx)
}
tx.Count(&res.Total)
tx.Scopes(Paginate(page, pageSize))
tx.Find(&res.Groups)
return
}
// Create 创建
func (us *GroupService) Create(u *model.Group) error {
res := global.DB.Create(u).Error
return res
}
func (us *GroupService) Delete(u *model.Group) error {
return global.DB.Delete(u).Error
}
// Update 更新
func (us *GroupService) Update(u *model.Group) error {
return global.DB.Model(u).Updates(u).Error
}

63
service/peer.go Normal file
View File

@@ -0,0 +1,63 @@
package service
import (
"Gwen/global"
"Gwen/model"
"gorm.io/gorm"
)
type PeerService struct {
}
// FindById 根据id查找
func (ps *PeerService) FindById(id string) *model.Peer {
p := &model.Peer{}
global.DB.Where("id = ?", id).First(p)
return p
}
func (ps *PeerService) InfoByRowId(id uint) *model.Peer {
p := &model.Peer{}
global.DB.Where("row_id = ?", id).First(p)
return p
}
//// ListByUserIds 根据用户id取列表
//func (ps *PeerService) ListByUserIds(userIds []uint, page, pageSize uint) (res *model.PeerList) {
// res = &model.PeerList{}
// res.Page = int64(page)
// res.PageSize = int64(pageSize)
// tx := global.DB.Model(&model.Peer{}).Preload("User")
// tx.Where("user_id in (?)", userIds)
// tx.Count(&res.Total)
// tx.Scopes(Paginate(page, pageSize))
// tx.Find(&res.Peers)
// return
//}
func (ps *PeerService) List(page, pageSize uint, where func(tx *gorm.DB)) (res *model.PeerList) {
res = &model.PeerList{}
res.Page = int64(page)
res.PageSize = int64(pageSize)
tx := global.DB.Model(&model.Peer{})
if where != nil {
where(tx)
}
tx.Count(&res.Total)
tx.Scopes(Paginate(page, pageSize))
tx.Find(&res.Peers)
return
}
// Create 创建
func (ps *PeerService) Create(u *model.Peer) error {
res := global.DB.Create(u).Error
return res
}
func (ps *PeerService) Delete(u *model.Peer) error {
return global.DB.Delete(u).Error
}
// Update 更新
func (ps *PeerService) Update(u *model.Peer) error {
return global.DB.Model(u).Updates(u).Error
}

42
service/service.go Normal file
View File

@@ -0,0 +1,42 @@
package service
import (
"Gwen/model"
"gorm.io/gorm"
)
type Service struct {
//AdminService *AdminService
//AdminRoleService *AdminRoleService
*UserService
*AddressBookService
*TagService
*PeerService
*GroupService
}
func New() *Service {
all := new(Service)
return all
}
var AllService = New()
func Paginate(page, pageSize uint) func(db *gorm.DB) *gorm.DB {
return func(db *gorm.DB) *gorm.DB {
if page == 0 {
page = 1
}
if pageSize == 0 {
pageSize = 10
}
offset := (page - 1) * pageSize
return db.Offset(int(offset)).Limit(int(pageSize))
}
}
func CommonEnable() func(db *gorm.DB) *gorm.DB {
return func(db *gorm.DB) *gorm.DB {
return db.Where("status = ?", model.COMMON_STATUS_ENABLE)
}
}

88
service/tag.go Normal file
View File

@@ -0,0 +1,88 @@
package service
import (
"Gwen/global"
"Gwen/model"
"gorm.io/gorm"
)
type TagService struct {
}
func (s *TagService) Info(id uint) *model.Tag {
p := &model.Tag{}
global.DB.Where("id = ?", id).First(p)
return p
}
func (s *TagService) ListByUserId(userId uint) (res *model.TagList) {
res = s.List(1, 1000, func(tx *gorm.DB) {
tx.Where("user_id = ?", userId)
})
return
}
func (s *TagService) UpdateTags(userId uint, tags map[string]uint) {
tx := global.DB.Begin()
//先查询所有tag
var allTags []*model.Tag
tx.Where("user_id = ?", userId).Find(&allTags)
for _, t := range allTags {
if _, ok := tags[t.Name]; !ok {
//删除
tx.Delete(t)
} else {
if tags[t.Name] != t.Color {
//更新
t.Color = tags[t.Name]
tx.Save(t)
}
//移除
delete(tags, t.Name)
}
}
//新增
for tag, color := range tags {
t := &model.Tag{}
t.Name = tag
t.Color = color
t.UserId = userId
tx.Create(t)
}
tx.Commit()
}
// InfoById 根据用户id取用户信息
func (t *TagService) InfoById(id uint) *model.Tag {
u := &model.Tag{}
global.DB.Where("id = ?", id).First(u)
return u
}
func (t *TagService) List(page, pageSize uint, where func(tx *gorm.DB)) (res *model.TagList) {
res = &model.TagList{}
res.Page = int64(page)
res.PageSize = int64(pageSize)
tx := global.DB.Model(&model.Tag{})
if where != nil {
where(tx)
}
tx.Count(&res.Total)
tx.Scopes(Paginate(page, pageSize))
tx.Find(&res.Tags)
return
}
// Create 创建
func (t *TagService) Create(u *model.Tag) error {
res := global.DB.Create(u).Error
return res
}
func (t *TagService) Delete(u *model.Tag) error {
return global.DB.Delete(u).Error
}
// Update 更新
func (t *TagService) Update(u *model.Tag) error {
return global.DB.Model(u).Updates(u).Error
}

171
service/user.go Normal file
View File

@@ -0,0 +1,171 @@
package service
import (
"Gwen/global"
adResp "Gwen/http/response/admin"
"Gwen/model"
"Gwen/utils"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
"time"
)
type UserService struct {
}
// InfoById 根据用户id取用户信息
func (us *UserService) InfoById(id uint) *model.User {
u := &model.User{}
global.DB.Where("id = ?", id).First(u)
return u
}
// InfoByOpenid 根据openid取用户信息
func (us *UserService) InfoByOpenid(openid string) *model.User {
u := &model.User{}
global.DB.Where("openid = ?", openid).First(u)
return u
}
// InfoByUsernamePassword 根据用户名密码取用户信息
func (us *UserService) InfoByUsernamePassword(username, password string) *model.User {
u := &model.User{}
global.DB.Where("username = ? and password = ?", username, us.EncryptPassword(password)).First(u)
return u
}
// InfoByAccesstoken 根据accesstoken取用户信息
func (us *UserService) InfoByAccessToken(token string) *model.User {
u := &model.User{}
ut := &model.UserToken{}
global.DB.Where("token = ?", token).First(ut)
if ut.Id == 0 {
return u
}
if ut.ExpiredAt < time.Now().Unix() {
return u
}
global.DB.Where("id = ?", ut.UserId).First(u)
return u
}
// GenerateToken 生成token
func (us *UserService) GenerateToken(u *model.User) string {
return utils.Md5(u.Username + u.Password + time.Now().String())
}
// Login 登录
func (us *UserService) Login(u *model.User) *model.UserToken {
token := us.GenerateToken(u)
ut := &model.UserToken{
UserId: u.Id,
Token: token,
ExpiredAt: time.Now().Add(time.Hour * 24 * 7).Unix(),
}
global.DB.Create(ut)
return ut
}
// CurUser 获取当前用户
func (us *UserService) CurUser(c *gin.Context) *model.User {
user, _ := c.Get("curUser")
u, ok := user.(*model.User)
if !ok {
return nil
}
return u
}
func (us *UserService) List(page, pageSize uint, where func(tx *gorm.DB)) (res *model.UserList) {
res = &model.UserList{}
res.Page = int64(page)
res.PageSize = int64(pageSize)
tx := global.DB.Model(&model.User{})
if where != nil {
where(tx)
}
tx.Count(&res.Total)
tx.Scopes(Paginate(page, pageSize))
tx.Find(&res.Users)
return
}
// ListByGroupId 根据组id取用户列表
func (us *UserService) ListByGroupId(groupId, page, pageSize uint) (res *model.UserList) {
res = us.List(page, pageSize, func(tx *gorm.DB) {
tx.Where("group_id = ?", groupId)
})
return
}
// ListIdsByGroupId 根据组id取用户id列表
func (us *UserService) ListIdsByGroupId(groupId uint) (ids []uint) {
global.DB.Model(&model.User{}).Where("group_id = ?", groupId).Pluck("id", &ids)
return ids
}
// ListIdAndNameByGroupId 根据组id取用户id和用户名列表
func (us *UserService) ListIdAndNameByGroupId(groupId uint) (res []*model.User) {
global.DB.Model(&model.User{}).Where("group_id = ?", groupId).Select("id, username").Find(&res)
return res
}
// EncryptPassword 加密密码
func (us *UserService) EncryptPassword(password string) string {
return utils.Md5(password + "rustdesk-api")
}
// CheckUserEnable 判断用户是否禁用
func (us *UserService) CheckUserEnable(u *model.User) bool {
return u.Status == model.COMMON_STATUS_ENABLE
}
// Create 创建
func (us *UserService) Create(u *model.User) error {
u.Password = us.EncryptPassword(u.Password)
res := global.DB.Create(u).Error
return res
}
// Logout 退出登录
func (us *UserService) Logout(u *model.User, token string) error {
return global.DB.Where("user_id = ? and token = ?", u.Id, token).Delete(&model.UserToken{}).Error
}
func (us *UserService) Delete(u *model.User) error {
return global.DB.Delete(u).Error
}
// Update 更新
func (us *UserService) Update(u *model.User) error {
return global.DB.Model(u).Updates(u).Error
}
// FlushToken 清空token
func (us *UserService) FlushToken(u *model.User) error {
return global.DB.Where("user_id = ?", u.Id).Delete(&model.UserToken{}).Error
}
// UpdatePassword 更新密码
func (us *UserService) UpdatePassword(u *model.User, password string) error {
u.Password = us.EncryptPassword(password)
err := global.DB.Model(u).Update("password", u.Password).Error
if err != nil {
return err
}
err = us.FlushToken(u)
return err
}
// IsAdmin 是否管理员
func (us *UserService) IsAdmin(u *model.User) bool {
return *u.IsAdmin
}
// RouteNames
func (us *UserService) RouteNames(u *model.User) []string {
if us.IsAdmin(u) {
return adResp.AdminRouteNames
}
return adResp.UserRouteNames
}