mirror of https://github.com/rocboss/paopao-ce
parent
fde5173e96
commit
5433eb9e8f
@ -0,0 +1,27 @@
|
||||
package model
|
||||
|
||||
import "gorm.io/gorm"
|
||||
|
||||
type AttachmentType int
|
||||
|
||||
const (
|
||||
ATTACHMENT_TYPE_IMAGE AttachmentType = iota + 1
|
||||
ATTACHMENT_TYPE_VIDEO
|
||||
ATTACHMENT_TYPE_OTHER
|
||||
)
|
||||
|
||||
type Attachment struct {
|
||||
*Model
|
||||
UserID int64 `json:"user_id"`
|
||||
FileSize int64 `json:"file_size"`
|
||||
ImgWidth int `json:"img_width"`
|
||||
ImgHeight int `json:"img_height"`
|
||||
Type AttachmentType `json:"type"`
|
||||
Content string `json:"content"`
|
||||
}
|
||||
|
||||
func (a *Attachment) Create(db *gorm.DB) (*Attachment, error) {
|
||||
err := db.Create(&a).Error
|
||||
|
||||
return a, err
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
package model
|
||||
|
||||
import "gorm.io/gorm"
|
||||
|
||||
type Captcha struct {
|
||||
*Model
|
||||
Phone string `json:"phone"`
|
||||
Captcha string `json:"captcha"`
|
||||
UseTimes int `json:"use_times"`
|
||||
ExpiredOn int64 `json:"expired_on"`
|
||||
}
|
||||
|
||||
func (c *Captcha) Create(db *gorm.DB) (*Captcha, error) {
|
||||
err := db.Create(&c).Error
|
||||
|
||||
return c, err
|
||||
}
|
||||
|
||||
func (c *Captcha) Update(db *gorm.DB) error {
|
||||
return db.Model(&Captcha{}).Where("id = ? AND is_del = ?", c.Model.ID, 0).Save(c).Error
|
||||
}
|
||||
|
||||
func (c *Captcha) Get(db *gorm.DB) (*Captcha, error) {
|
||||
var captcha Captcha
|
||||
if c.Model != nil && c.ID > 0 {
|
||||
db = db.Where("id = ? AND is_del = ?", c.ID, 0)
|
||||
}
|
||||
if c.Phone != "" {
|
||||
db = db.Where("phone = ?", c.Phone)
|
||||
}
|
||||
|
||||
err := db.Last(&captcha).Error
|
||||
if err != nil {
|
||||
return &captcha, err
|
||||
}
|
||||
|
||||
return &captcha, nil
|
||||
}
|
@ -0,0 +1,127 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type Comment struct {
|
||||
*Model
|
||||
PostID int64 `json:"post_id"`
|
||||
UserID int64 `json:"user_id"`
|
||||
IP string `json:"ip"`
|
||||
IPLoc string `json:"ip_loc"`
|
||||
}
|
||||
|
||||
type CommentFormated struct {
|
||||
ID int64 `json:"id"`
|
||||
PostID int64 `json:"post_id"`
|
||||
UserID int64 `json:"user_id"`
|
||||
User *UserFormated `json:"user"`
|
||||
Contents []*CommentContent `json:"contents"`
|
||||
Replies []*CommentReplyFormated `json:"replies"`
|
||||
IPLoc string `json:"ip_loc"`
|
||||
CreatedOn int64 `json:"created_on"`
|
||||
ModifiedOn int64 `json:"modified_on"`
|
||||
}
|
||||
|
||||
func (c *Comment) Format() *CommentFormated {
|
||||
if c.Model == nil {
|
||||
return &CommentFormated{}
|
||||
}
|
||||
return &CommentFormated{
|
||||
ID: c.Model.ID,
|
||||
PostID: c.PostID,
|
||||
UserID: c.UserID,
|
||||
User: &UserFormated{},
|
||||
Contents: []*CommentContent{},
|
||||
Replies: []*CommentReplyFormated{},
|
||||
IPLoc: c.IPLoc,
|
||||
CreatedOn: c.CreatedOn,
|
||||
ModifiedOn: c.ModifiedOn,
|
||||
}
|
||||
}
|
||||
|
||||
func (c *Comment) Get(db *gorm.DB) (*Comment, error) {
|
||||
var comment Comment
|
||||
if c.Model != nil && c.ID > 0 {
|
||||
db = db.Where("id = ? AND is_del = ?", c.ID, 0)
|
||||
} else {
|
||||
return nil, gorm.ErrRecordNotFound
|
||||
}
|
||||
|
||||
err := db.First(&comment).Error
|
||||
if err != nil {
|
||||
return &comment, err
|
||||
}
|
||||
|
||||
return &comment, nil
|
||||
}
|
||||
|
||||
func (c *Comment) List(db *gorm.DB, conditions *ConditionsT, offset, limit int) ([]*Comment, error) {
|
||||
var comments []*Comment
|
||||
var err error
|
||||
if offset >= 0 && limit > 0 {
|
||||
db = db.Offset(offset).Limit(limit)
|
||||
}
|
||||
if c.PostID > 0 {
|
||||
db = db.Where("id = ?", c.PostID)
|
||||
}
|
||||
|
||||
for k, v := range *conditions {
|
||||
if k == "ORDER" {
|
||||
db = db.Order(v)
|
||||
} else {
|
||||
db = db.Where(k, v)
|
||||
}
|
||||
}
|
||||
|
||||
if err = db.Where("is_del = ?", 0).Find(&comments).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return comments, nil
|
||||
}
|
||||
|
||||
func (c *Comment) Count(db *gorm.DB, conditions *ConditionsT) (int64, error) {
|
||||
var count int64
|
||||
if c.PostID > 0 {
|
||||
db = db.Where("post_id = ?", c.PostID)
|
||||
}
|
||||
for k, v := range *conditions {
|
||||
if k != "ORDER" {
|
||||
db = db.Where(k, v)
|
||||
}
|
||||
}
|
||||
if err := db.Model(c).Count(&count).Error; err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return count, nil
|
||||
}
|
||||
|
||||
func (c *Comment) Create(db *gorm.DB) (*Comment, error) {
|
||||
err := db.Create(&c).Error
|
||||
|
||||
return c, err
|
||||
}
|
||||
|
||||
func (c *Comment) Delete(db *gorm.DB) error {
|
||||
return db.Model(c).Where("id = ?", c.Model.ID).Updates(map[string]any{
|
||||
"deleted_on": time.Now().Unix(),
|
||||
"is_del": 1,
|
||||
}).Error
|
||||
}
|
||||
|
||||
func (c *Comment) CommentIdsByPostId(db *gorm.DB, postId int64) (ids []int64, err error) {
|
||||
err = db.Model(c).Where("post_id = ?", postId).Select("id").Find(&ids).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (c *Comment) DeleteByPostId(db *gorm.DB, postId int64) error {
|
||||
return db.Model(c).Where("post_id = ?", postId).Updates(map[string]any{
|
||||
"deleted_on": time.Now().Unix(),
|
||||
"is_del": 1,
|
||||
}).Error
|
||||
}
|
@ -0,0 +1,59 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type CommentContent struct {
|
||||
*Model
|
||||
CommentID int64 `json:"comment_id"`
|
||||
UserID int64 `json:"user_id"`
|
||||
Content string `json:"content"`
|
||||
Type PostContentT `json:"type"`
|
||||
Sort int64 `json:"sort"`
|
||||
}
|
||||
|
||||
func (c *CommentContent) List(db *gorm.DB, conditions *ConditionsT, offset, limit int) ([]*CommentContent, error) {
|
||||
var comments []*CommentContent
|
||||
var err error
|
||||
if offset >= 0 && limit > 0 {
|
||||
db = db.Offset(offset).Limit(limit)
|
||||
}
|
||||
if c.CommentID > 0 {
|
||||
db = db.Where("id = ?", c.CommentID)
|
||||
}
|
||||
|
||||
for k, v := range *conditions {
|
||||
if k == "ORDER" {
|
||||
db = db.Order(v)
|
||||
} else {
|
||||
db = db.Where(k, v)
|
||||
}
|
||||
}
|
||||
|
||||
if err = db.Where("is_del = ?", 0).Find(&comments).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return comments, nil
|
||||
}
|
||||
|
||||
func (c *CommentContent) Create(db *gorm.DB) (*CommentContent, error) {
|
||||
err := db.Create(&c).Error
|
||||
|
||||
return c, err
|
||||
}
|
||||
|
||||
func (c *CommentContent) MediaContentsByCommentId(db *gorm.DB, commentIds []int64) (contents []string, err error) {
|
||||
err = db.Model(c).Where("comment_id IN ? AND type = ?", commentIds, CONTENT_TYPE_IMAGE).Select("content").Find(&contents).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (c *CommentContent) DeleteByCommentIds(db *gorm.DB, commentIds []int64) error {
|
||||
return db.Model(c).Where("comment_id IN ?", commentIds).Updates(map[string]any{
|
||||
"deleted_on": time.Now().Unix(),
|
||||
"is_del": 1,
|
||||
}).Error
|
||||
}
|
@ -0,0 +1,110 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type CommentReply struct {
|
||||
*Model
|
||||
CommentID int64 `json:"comment_id"`
|
||||
UserID int64 `json:"user_id"`
|
||||
AtUserID int64 `json:"at_user_id"`
|
||||
Content string `json:"content"`
|
||||
IP string `json:"ip"`
|
||||
IPLoc string `json:"ip_loc"`
|
||||
}
|
||||
|
||||
type CommentReplyFormated struct {
|
||||
ID int64 `json:"id"`
|
||||
CommentID int64 `json:"comment_id"`
|
||||
UserID int64 `json:"user_id"`
|
||||
User *UserFormated `json:"user"`
|
||||
AtUserID int64 `json:"at_user_id"`
|
||||
AtUser *UserFormated `json:"at_user"`
|
||||
Content string `json:"content"`
|
||||
IPLoc string `json:"ip_loc"`
|
||||
CreatedOn int64 `json:"created_on"`
|
||||
ModifiedOn int64 `json:"modified_on"`
|
||||
}
|
||||
|
||||
func (c *CommentReply) Format() *CommentReplyFormated {
|
||||
if c.Model == nil {
|
||||
return &CommentReplyFormated{}
|
||||
}
|
||||
|
||||
return &CommentReplyFormated{
|
||||
ID: c.ID,
|
||||
CommentID: c.CommentID,
|
||||
UserID: c.UserID,
|
||||
User: &UserFormated{},
|
||||
AtUserID: c.AtUserID,
|
||||
AtUser: &UserFormated{},
|
||||
Content: c.Content,
|
||||
IPLoc: c.IPLoc,
|
||||
CreatedOn: c.CreatedOn,
|
||||
ModifiedOn: c.ModifiedOn,
|
||||
}
|
||||
}
|
||||
|
||||
func (c *CommentReply) List(db *gorm.DB, conditions *ConditionsT, offset, limit int) ([]*CommentReply, error) {
|
||||
var comments []*CommentReply
|
||||
var err error
|
||||
if offset >= 0 && limit > 0 {
|
||||
db = db.Offset(offset).Limit(limit)
|
||||
}
|
||||
if c.CommentID > 0 {
|
||||
db = db.Where("id = ?", c.CommentID)
|
||||
}
|
||||
|
||||
for k, v := range *conditions {
|
||||
if k == "ORDER" {
|
||||
db = db.Order(v)
|
||||
} else {
|
||||
db = db.Where(k, v)
|
||||
}
|
||||
}
|
||||
|
||||
if err = db.Where("is_del = ?", 0).Find(&comments).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return comments, nil
|
||||
}
|
||||
|
||||
func (c *CommentReply) Create(db *gorm.DB) (*CommentReply, error) {
|
||||
err := db.Create(&c).Error
|
||||
|
||||
return c, err
|
||||
}
|
||||
|
||||
func (c *CommentReply) Get(db *gorm.DB) (*CommentReply, error) {
|
||||
var reply CommentReply
|
||||
if c.Model != nil && c.ID > 0 {
|
||||
db = db.Where("id = ? AND is_del = ?", c.ID, 0)
|
||||
} else {
|
||||
return nil, gorm.ErrRecordNotFound
|
||||
}
|
||||
|
||||
err := db.First(&reply).Error
|
||||
if err != nil {
|
||||
return &reply, err
|
||||
}
|
||||
|
||||
return &reply, nil
|
||||
}
|
||||
|
||||
func (c *CommentReply) Delete(db *gorm.DB) error {
|
||||
return db.Model(&CommentReply{}).Where("id = ? AND is_del = ?", c.Model.ID, 0).Updates(map[string]any{
|
||||
"deleted_on": time.Now().Unix(),
|
||||
"is_del": 1,
|
||||
}).Error
|
||||
}
|
||||
|
||||
func (c *CommentReply) DeleteByCommentIds(db *gorm.DB, commentIds []int64) error {
|
||||
return db.Model(c).Where("comment_id IN ?", commentIds).Updates(map[string]any{
|
||||
"deleted_on": time.Now().Unix(),
|
||||
"is_del": 1,
|
||||
}).Error
|
||||
}
|
@ -0,0 +1,119 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"github.com/sirupsen/logrus"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
const (
|
||||
ContactStatusRequesting int8 = iota + 1
|
||||
ContactStatusAgree
|
||||
ContactStatusReject
|
||||
ContactStatusDeleted
|
||||
)
|
||||
|
||||
type Contact struct {
|
||||
*Model
|
||||
User *User `json:"-" gorm:"foreignKey:ID;references:FriendId"`
|
||||
UserId int64 `json:"user_id"`
|
||||
FriendId int64 `json:"friend_id"`
|
||||
GroupId int64 `json:"group_id"`
|
||||
Remark string `json:"remark"`
|
||||
Status int8 `json:"status"` // 1请求好友, 2已同意好友, 3已拒绝好友, 4已删除好友
|
||||
IsTop int8 `json:"is_top"`
|
||||
IsBlack int8 `json:"is_black"`
|
||||
NoticeEnable int8 `json:"notice_enable"`
|
||||
}
|
||||
|
||||
func (c *Contact) FetchUser(db *gorm.DB) (*Contact, error) {
|
||||
var contact Contact
|
||||
err := db.Omit("User").Unscoped().Where("user_id = ? AND friend_id = ?", c.UserId, c.FriendId).First(&contact).Error
|
||||
if err != nil {
|
||||
logrus.Debugf("Contact.FetchUser fetch user error:%s", err)
|
||||
return nil, err
|
||||
}
|
||||
return &contact, nil
|
||||
}
|
||||
|
||||
func (c *Contact) GetByUserFriend(db *gorm.DB) (*Contact, error) {
|
||||
var contact Contact
|
||||
err := db.Omit("User").Where("user_id = ? AND friend_id = ?", c.UserId, c.FriendId).First(&contact).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &contact, nil
|
||||
}
|
||||
|
||||
func (c *Contact) FetchByUserFriendAll(db *gorm.DB) ([]*Contact, error) {
|
||||
var contacts []*Contact
|
||||
if err := db.Omit("User").
|
||||
Where("(user_id = ? AND friend_id = ?) OR (user_id = ? AND friend_id = ?)",
|
||||
c.UserId, c.FriendId, c.FriendId, c.UserId).
|
||||
Find(&contacts).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return contacts, nil
|
||||
}
|
||||
|
||||
func (c *Contact) List(db *gorm.DB, conditions ConditionsT, offset, limit int) ([]*Contact, error) {
|
||||
var contacts []*Contact
|
||||
var err error
|
||||
tn := db.NamingStrategy.TableName("Contact") + "."
|
||||
|
||||
if offset >= 0 && limit > 0 {
|
||||
db = db.Offset(offset).Limit(limit)
|
||||
}
|
||||
for k, v := range conditions {
|
||||
if k != "ORDER" {
|
||||
db = db.Where(tn+k, v)
|
||||
}
|
||||
}
|
||||
|
||||
db.Joins("User").Order("`User`.`nickname` ASC")
|
||||
if err = db.Find(&contacts).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return contacts, nil
|
||||
}
|
||||
|
||||
func (c *Contact) BeFriendIds(db *gorm.DB) (ids []int64, err error) {
|
||||
if err = db.Model(c).Omit("User").Select("user_id").Where("friend_id = ? AND status = ?", c.FriendId, ContactStatusAgree).Find(&ids).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (c *Contact) MyFriendIds(db *gorm.DB) (ids []string, err error) {
|
||||
if err = db.Model(c).Omit("User").Select("friend_id").Where("user_id = ? AND status = ?", c.UserId, ContactStatusAgree).Find(&ids).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (m *Contact) Count(db *gorm.DB, conditions ConditionsT) (int64, error) {
|
||||
var count int64
|
||||
|
||||
for k, v := range conditions {
|
||||
if k != "ORDER" {
|
||||
db = db.Where(k, v)
|
||||
}
|
||||
}
|
||||
if err := db.Model(m).Omit("User").Count(&count).Error; err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return count, nil
|
||||
}
|
||||
|
||||
func (c *Contact) Create(db *gorm.DB) (*Contact, error) {
|
||||
err := db.Omit("User").Create(&c).Error
|
||||
return c, err
|
||||
}
|
||||
|
||||
func (c *Contact) Update(db *gorm.DB) error {
|
||||
return db.Model(&Contact{}).Omit("User").Where("id = ?", c.Model.ID).Save(c).Error
|
||||
}
|
||||
|
||||
func (c *Contact) UpdateInUnscoped(db *gorm.DB) error {
|
||||
return db.Unscoped().Omit("User").Save(c).Error
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/plugin/soft_delete"
|
||||
)
|
||||
|
||||
// Model 公共Model
|
||||
type Model struct {
|
||||
ID int64 `gorm:"primary_key" json:"id"`
|
||||
CreatedOn int64 `json:"created_on"`
|
||||
ModifiedOn int64 `json:"modified_on"`
|
||||
DeletedOn int64 `json:"deleted_on"`
|
||||
IsDel soft_delete.DeletedAt `gorm:"softDelete:flag" json:"is_del"`
|
||||
}
|
||||
|
||||
type ConditionsT map[string]any
|
||||
type Predicates map[string][]any
|
||||
|
||||
func (m *Model) BeforeCreate(tx *gorm.DB) (err error) {
|
||||
nowTime := time.Now().Unix()
|
||||
|
||||
tx.Statement.SetColumn("created_on", nowTime)
|
||||
tx.Statement.SetColumn("modified_on", nowTime)
|
||||
return
|
||||
}
|
||||
|
||||
func (m *Model) BeforeUpdate(tx *gorm.DB) (err error) {
|
||||
if !tx.Statement.Changed("modified_on") {
|
||||
tx.Statement.SetColumn("modified_on", time.Now().Unix())
|
||||
}
|
||||
|
||||
return
|
||||
}
|
@ -0,0 +1,148 @@
|
||||
package model
|
||||
|
||||
import "gorm.io/gorm"
|
||||
|
||||
type MessageT int8
|
||||
|
||||
const (
|
||||
MsgTypePost MessageT = iota + 1
|
||||
MsgtypeComment
|
||||
MsgTypeReply
|
||||
MsgTypeWhisper
|
||||
MsgTypeRequestingFriend
|
||||
MsgTypeSystem MessageT = 99
|
||||
|
||||
MsgStatusUnread = 0
|
||||
MsgStatusReaded = 1
|
||||
)
|
||||
|
||||
type Message struct {
|
||||
*Model
|
||||
SenderUserID int64 `json:"sender_user_id"`
|
||||
ReceiverUserID int64 `json:"receiver_user_id"`
|
||||
Type MessageT `json:"type"`
|
||||
Brief string `json:"brief"`
|
||||
Content string `json:"content"`
|
||||
PostID int64 `json:"post_id"`
|
||||
CommentID int64 `json:"comment_id"`
|
||||
ReplyID int64 `json:"reply_id"`
|
||||
IsRead int8 `json:"is_read"`
|
||||
}
|
||||
|
||||
type MessageFormated struct {
|
||||
ID int64 `json:"id"`
|
||||
SenderUserID int64 `json:"sender_user_id"`
|
||||
SenderUser *UserFormated `json:"sender_user"`
|
||||
ReceiverUserID int64 `json:"receiver_user_id"`
|
||||
Type MessageT `json:"type"`
|
||||
Brief string `json:"brief"`
|
||||
Content string `json:"content"`
|
||||
PostID int64 `json:"post_id"`
|
||||
Post *PostFormated `json:"post"`
|
||||
CommentID int64 `json:"comment_id"`
|
||||
Comment *Comment `json:"comment"`
|
||||
ReplyID int64 `json:"reply_id"`
|
||||
Reply *CommentReply `json:"reply"`
|
||||
IsRead int8 `json:"is_read"`
|
||||
CreatedOn int64 `json:"created_on"`
|
||||
ModifiedOn int64 `json:"modified_on"`
|
||||
}
|
||||
|
||||
func (m *Message) Format() *MessageFormated {
|
||||
if m.Model == nil || m.Model.ID == 0 {
|
||||
return nil
|
||||
}
|
||||
mf := &MessageFormated{
|
||||
ID: m.ID,
|
||||
SenderUserID: m.SenderUserID,
|
||||
SenderUser: &UserFormated{},
|
||||
ReceiverUserID: m.ReceiverUserID,
|
||||
Type: m.Type,
|
||||
Brief: m.Brief,
|
||||
Content: m.Content,
|
||||
PostID: m.PostID,
|
||||
Post: &PostFormated{},
|
||||
CommentID: m.CommentID,
|
||||
Comment: &Comment{},
|
||||
ReplyID: m.ReplyID,
|
||||
Reply: &CommentReply{},
|
||||
IsRead: m.IsRead,
|
||||
CreatedOn: m.CreatedOn,
|
||||
ModifiedOn: m.ModifiedOn,
|
||||
}
|
||||
|
||||
return mf
|
||||
}
|
||||
|
||||
func (m *Message) Create(db *gorm.DB) (*Message, error) {
|
||||
err := db.Create(&m).Error
|
||||
|
||||
return m, err
|
||||
}
|
||||
|
||||
func (m *Message) Update(db *gorm.DB) error {
|
||||
return db.Model(&Message{}).Where("id = ? AND is_del = ?", m.Model.ID, 0).Save(m).Error
|
||||
}
|
||||
|
||||
func (m *Message) Get(db *gorm.DB) (*Message, error) {
|
||||
var message Message
|
||||
if m.Model != nil && m.ID > 0 {
|
||||
db = db.Where("id = ? AND is_del = ?", m.ID, 0)
|
||||
}
|
||||
if m.ReceiverUserID > 0 {
|
||||
db = db.Where("receiver_user_id = ?", m.ReceiverUserID)
|
||||
}
|
||||
if err := db.First(&message).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &message, nil
|
||||
}
|
||||
|
||||
func (m *Message) FetchBy(db *gorm.DB, predicates Predicates) ([]*Message, error) {
|
||||
var messages []*Message
|
||||
for k, v := range predicates {
|
||||
db = db.Where(k, v...)
|
||||
}
|
||||
db = db.Where("is_del = 0")
|
||||
if err := db.Find(&messages).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return messages, nil
|
||||
}
|
||||
|
||||
func (c *Message) List(db *gorm.DB, conditions *ConditionsT, offset, limit int) ([]*Message, error) {
|
||||
var messages []*Message
|
||||
var err error
|
||||
if offset >= 0 && limit > 0 {
|
||||
db = db.Offset(offset).Limit(limit)
|
||||
}
|
||||
|
||||
for k, v := range *conditions {
|
||||
if k == "ORDER" {
|
||||
db = db.Order(v)
|
||||
} else {
|
||||
db = db.Where(k, v)
|
||||
}
|
||||
}
|
||||
|
||||
if err = db.Where("is_del = ?", 0).Find(&messages).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return messages, nil
|
||||
}
|
||||
|
||||
func (m *Message) Count(db *gorm.DB, conditions *ConditionsT) (int64, error) {
|
||||
var count int64
|
||||
|
||||
for k, v := range *conditions {
|
||||
if k != "ORDER" {
|
||||
db = db.Where(k, v)
|
||||
}
|
||||
}
|
||||
if err := db.Model(m).Count(&count).Error; err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return count, nil
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
package model
|
||||
|
||||
import "gorm.io/gorm"
|
||||
|
||||
type PostAttachmentBill struct {
|
||||
*Model
|
||||
PostID int64 `json:"post_id"`
|
||||
UserID int64 `json:"user_id"`
|
||||
PaidAmount int64 `json:"paid_amount"`
|
||||
}
|
||||
|
||||
func (p *PostAttachmentBill) Get(db *gorm.DB) (*PostAttachmentBill, error) {
|
||||
var pas PostAttachmentBill
|
||||
if p.Model != nil && p.ID > 0 {
|
||||
db = db.Where("id = ? AND is_del = ?", p.ID, 0)
|
||||
}
|
||||
if p.PostID > 0 {
|
||||
db = db.Where("post_id = ?", p.PostID)
|
||||
}
|
||||
if p.UserID > 0 {
|
||||
db = db.Where("user_id = ?", p.UserID)
|
||||
}
|
||||
|
||||
err := db.First(&pas).Error
|
||||
if err != nil {
|
||||
return &pas, err
|
||||
}
|
||||
|
||||
return &pas, nil
|
||||
}
|
||||
|
||||
func (p *PostAttachmentBill) Create(db *gorm.DB) (*PostAttachmentBill, error) {
|
||||
err := db.Create(&p).Error
|
||||
|
||||
return p, err
|
||||
}
|
@ -0,0 +1,102 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type PostCollection struct {
|
||||
*Model
|
||||
Post *Post `json:"-"`
|
||||
PostID int64 `json:"post_id"`
|
||||
UserID int64 `json:"user_id"`
|
||||
}
|
||||
|
||||
func (p *PostCollection) Get(db *gorm.DB) (*PostCollection, error) {
|
||||
var star PostCollection
|
||||
tn := db.NamingStrategy.TableName("PostCollection") + "."
|
||||
|
||||
if p.Model != nil && p.ID > 0 {
|
||||
db = db.Where(tn+"id = ? AND "+tn+"is_del = ?", p.ID, 0)
|
||||
}
|
||||
if p.PostID > 0 {
|
||||
db = db.Where(tn+"post_id = ?", p.PostID)
|
||||
}
|
||||
if p.UserID > 0 {
|
||||
db = db.Where(tn+"user_id = ?", p.UserID)
|
||||
}
|
||||
|
||||
db = db.Joins("Post").Where("Post.visibility <> ?", PostVisitPrivate).Order("Post.id DESC")
|
||||
err := db.First(&star).Error
|
||||
if err != nil {
|
||||
return &star, err
|
||||
}
|
||||
|
||||
return &star, nil
|
||||
}
|
||||
|
||||
func (p *PostCollection) Create(db *gorm.DB) (*PostCollection, error) {
|
||||
err := db.Omit("Post").Create(&p).Error
|
||||
|
||||
return p, err
|
||||
}
|
||||
|
||||
func (p *PostCollection) Delete(db *gorm.DB) error {
|
||||
return db.Model(&PostCollection{}).Omit("Post").Where("id = ? AND is_del = ?", p.Model.ID, 0).Updates(map[string]any{
|
||||
"deleted_on": time.Now().Unix(),
|
||||
"is_del": 1,
|
||||
}).Error
|
||||
}
|
||||
|
||||
func (p *PostCollection) List(db *gorm.DB, conditions *ConditionsT, offset, limit int) ([]*PostCollection, error) {
|
||||
var collections []*PostCollection
|
||||
var err error
|
||||
tn := db.NamingStrategy.TableName("PostCollection") + "."
|
||||
|
||||
if offset >= 0 && limit > 0 {
|
||||
db = db.Offset(offset).Limit(limit)
|
||||
}
|
||||
if p.UserID > 0 {
|
||||
db = db.Where(tn+"user_id = ?", p.UserID)
|
||||
}
|
||||
|
||||
for k, v := range *conditions {
|
||||
if k == "ORDER" {
|
||||
db = db.Order(v)
|
||||
} else {
|
||||
db = db.Where(tn+k, v)
|
||||
}
|
||||
}
|
||||
|
||||
db = db.Joins("Post").Where("Post.visibility <> ?", PostVisitPrivate).Order("Post.id DESC")
|
||||
if err = db.Where(tn+"is_del = ?", 0).Find(&collections).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return collections, nil
|
||||
}
|
||||
|
||||
func (p *PostCollection) Count(db *gorm.DB, conditions *ConditionsT) (int64, error) {
|
||||
var count int64
|
||||
tn := db.NamingStrategy.TableName("PostCollection") + "."
|
||||
|
||||
if p.PostID > 0 {
|
||||
db = db.Where(tn+"post_id = ?", p.PostID)
|
||||
}
|
||||
if p.UserID > 0 {
|
||||
db = db.Where(tn+"user_id = ?", p.UserID)
|
||||
}
|
||||
for k, v := range *conditions {
|
||||
if k != "ORDER" {
|
||||
db = db.Where(tn+k, v)
|
||||
}
|
||||
}
|
||||
|
||||
db = db.Joins("Post").Where("Post.visibility <> ?", PostVisitPrivate)
|
||||
if err := db.Model(p).Count(&count).Error; err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return count, nil
|
||||
}
|
@ -0,0 +1,98 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type PostStar struct {
|
||||
*Model
|
||||
Post *Post `json:"-"`
|
||||
PostID int64 `json:"post_id"`
|
||||
UserID int64 `json:"user_id"`
|
||||
}
|
||||
|
||||
func (p *PostStar) Get(db *gorm.DB) (*PostStar, error) {
|
||||
var star PostStar
|
||||
tn := db.NamingStrategy.TableName("PostStar") + "."
|
||||
|
||||
if p.Model != nil && p.ID > 0 {
|
||||
db = db.Where(tn+"id = ? AND "+tn+"is_del = ?", p.ID, 0)
|
||||
}
|
||||
if p.PostID > 0 {
|
||||
db = db.Where(tn+"post_id = ?", p.PostID)
|
||||
}
|
||||
if p.UserID > 0 {
|
||||
db = db.Where(tn+"user_id = ?", p.UserID)
|
||||
}
|
||||
|
||||
db = db.Joins("Post").Where("Post.visibility <> ?", PostVisitPrivate).Order("Post.id DESC")
|
||||
if err := db.First(&star).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &star, nil
|
||||
}
|
||||
|
||||
func (p *PostStar) Create(db *gorm.DB) (*PostStar, error) {
|
||||
err := db.Omit("Post").Create(&p).Error
|
||||
|
||||
return p, err
|
||||
}
|
||||
|
||||
func (p *PostStar) Delete(db *gorm.DB) error {
|
||||
return db.Model(&PostStar{}).Omit("Post").Where("id = ? AND is_del = ?", p.Model.ID, 0).Updates(map[string]any{
|
||||
"deleted_on": time.Now().Unix(),
|
||||
"is_del": 1,
|
||||
}).Error
|
||||
}
|
||||
|
||||
func (p *PostStar) List(db *gorm.DB, conditions *ConditionsT, offset, limit int) ([]*PostStar, error) {
|
||||
var stars []*PostStar
|
||||
var err error
|
||||
tn := db.NamingStrategy.TableName("PostStar") + "."
|
||||
|
||||
if offset >= 0 && limit > 0 {
|
||||
db = db.Offset(offset).Limit(limit)
|
||||
}
|
||||
if p.UserID > 0 {
|
||||
db = db.Where(tn+"user_id = ?", p.UserID)
|
||||
}
|
||||
|
||||
for k, v := range *conditions {
|
||||
if k == "ORDER" {
|
||||
db = db.Order(v)
|
||||
} else {
|
||||
db = db.Where(tn+k, v)
|
||||
}
|
||||
}
|
||||
|
||||
db = db.Joins("Post").Where("Post.visibility <> ?", PostVisitPrivate).Order("Post.id DESC")
|
||||
if err = db.Find(&stars).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return stars, nil
|
||||
}
|
||||
|
||||
func (p *PostStar) Count(db *gorm.DB, conditions *ConditionsT) (int64, error) {
|
||||
var count int64
|
||||
tn := db.NamingStrategy.TableName("PostStar") + "."
|
||||
|
||||
if p.PostID > 0 {
|
||||
db = db.Where(tn+"post_id = ?", p.PostID)
|
||||
}
|
||||
if p.UserID > 0 {
|
||||
db = db.Where(tn+"user_id = ?", p.UserID)
|
||||
}
|
||||
for k, v := range *conditions {
|
||||
if k != "ORDER" {
|
||||
db = db.Where(tn+k, v)
|
||||
}
|
||||
}
|
||||
|
||||
db = db.Joins("Post").Where("Post.visibility <> ?", PostVisitPrivate)
|
||||
if err := db.Model(p).Count(&count).Error; err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return count, nil
|
||||
}
|
@ -0,0 +1,97 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type Tag struct {
|
||||
*Model
|
||||
UserID int64 `json:"user_id"`
|
||||
Tag string `json:"tag"`
|
||||
QuoteNum int64 `json:"quote_num"`
|
||||
}
|
||||
type TagFormated struct {
|
||||
ID int64 `json:"id"`
|
||||
UserID int64 `json:"user_id"`
|
||||
User *UserFormated `json:"user"`
|
||||
Tag string `json:"tag"`
|
||||
QuoteNum int64 `json:"quote_num"`
|
||||
}
|
||||
|
||||
func (t *Tag) Format() *TagFormated {
|
||||
if t.Model == nil {
|
||||
return &TagFormated{}
|
||||
}
|
||||
|
||||
return &TagFormated{
|
||||
ID: t.ID,
|
||||
UserID: t.UserID,
|
||||
User: &UserFormated{},
|
||||
Tag: t.Tag,
|
||||
QuoteNum: t.QuoteNum,
|
||||
}
|
||||
}
|
||||
|
||||
func (t *Tag) Get(db *gorm.DB) (*Tag, error) {
|
||||
var tag Tag
|
||||
if t.Model != nil && t.Model.ID > 0 {
|
||||
db = db.Where("id= ? AND is_del = ?", t.Model.ID, 0)
|
||||
} else {
|
||||
db = db.Where("tag = ? AND is_del = ?", t.Tag, 0)
|
||||
}
|
||||
|
||||
err := db.First(&tag).Error
|
||||
if err != nil {
|
||||
return &tag, err
|
||||
}
|
||||
|
||||
return &tag, nil
|
||||
}
|
||||
|
||||
func (t *Tag) Create(db *gorm.DB) (*Tag, error) {
|
||||
err := db.Create(&t).Error
|
||||
|
||||
return t, err
|
||||
}
|
||||
|
||||
func (t *Tag) Update(db *gorm.DB) error {
|
||||
return db.Model(&Tag{}).Where("id = ? AND is_del = ?", t.Model.ID, 0).Save(t).Error
|
||||
}
|
||||
|
||||
func (t *Tag) Delete(db *gorm.DB) error {
|
||||
return db.Model(t).Where("id = ?", t.Model.ID).Updates(map[string]any{
|
||||
"deleted_on": time.Now().Unix(),
|
||||
"is_del": 1,
|
||||
}).Error
|
||||
}
|
||||
|
||||
func (t *Tag) List(db *gorm.DB, conditions *ConditionsT, offset, limit int) ([]*Tag, error) {
|
||||
var tags []*Tag
|
||||
var err error
|
||||
if offset >= 0 && limit > 0 {
|
||||
db = db.Offset(offset).Limit(limit)
|
||||
}
|
||||
if t.UserID > 0 {
|
||||
db = db.Where("user_id = ?", t.UserID)
|
||||
}
|
||||
for k, v := range *conditions {
|
||||
if k == "ORDER" {
|
||||
db = db.Order(v)
|
||||
} else {
|
||||
db = db.Where(k, v)
|
||||
}
|
||||
}
|
||||
|
||||
if err = db.Where("is_del = ?", 0).Find(&tags).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return tags, nil
|
||||
}
|
||||
|
||||
func (t *Tag) TagsFrom(db *gorm.DB, tags []string) (res []*Tag, err error) {
|
||||
err = db.Where("tag IN ?", tags).Find(&res).Error
|
||||
return
|
||||
}
|
@ -0,0 +1,94 @@
|
||||
package model
|
||||
|
||||
import "gorm.io/gorm"
|
||||
|
||||
const (
|
||||
UserStatusNormal int = iota + 1
|
||||
UserStatusClosed
|
||||
)
|
||||
|
||||
type User struct {
|
||||
*Model
|
||||
Nickname string `json:"nickname"`
|
||||
Username string `json:"username"`
|
||||
Phone string `json:"phone"`
|
||||
Password string `json:"password"`
|
||||
Salt string `json:"salt"`
|
||||
Status int `json:"status"`
|
||||
Avatar string `json:"avatar"`
|
||||
Balance int64 `json:"balance"`
|
||||
IsAdmin bool `json:"is_admin"`
|
||||
}
|
||||
|
||||
type UserFormated struct {
|
||||
ID int64 `json:"id"`
|
||||
Nickname string `json:"nickname"`
|
||||
Username string `json:"username"`
|
||||
Status int `json:"status"`
|
||||
Avatar string `json:"avatar"`
|
||||
IsAdmin bool `json:"is_admin"`
|
||||
}
|
||||
|
||||
func (u *User) Format() *UserFormated {
|
||||
if u.Model != nil {
|
||||
return &UserFormated{
|
||||
ID: u.ID,
|
||||
Nickname: u.Nickname,
|
||||
Username: u.Username,
|
||||
Status: u.Status,
|
||||
Avatar: u.Avatar,
|
||||
IsAdmin: u.IsAdmin,
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (u *User) Get(db *gorm.DB) (*User, error) {
|
||||
var user User
|
||||
if u.Model != nil && u.Model.ID > 0 {
|
||||
db = db.Where("id= ? AND is_del = ?", u.Model.ID, 0)
|
||||
} else if u.Phone != "" {
|
||||
db = db.Where("phone = ? AND is_del = ?", u.Phone, 0)
|
||||
} else {
|
||||
db = db.Where("username = ? AND is_del = ?", u.Username, 0)
|
||||
}
|
||||
|
||||
err := db.First(&user).Error
|
||||
if err != nil {
|
||||
return &user, err
|
||||
}
|
||||
|
||||
return &user, nil
|
||||
}
|
||||
|
||||
func (u *User) List(db *gorm.DB, conditions *ConditionsT, offset, limit int) ([]*User, error) {
|
||||
var users []*User
|
||||
var err error
|
||||
if offset >= 0 && limit > 0 {
|
||||
db = db.Offset(offset).Limit(limit)
|
||||
}
|
||||
for k, v := range *conditions {
|
||||
if k == "ORDER" {
|
||||
db = db.Order(v)
|
||||
} else {
|
||||
db = db.Where(k, v)
|
||||
}
|
||||
}
|
||||
|
||||
if err = db.Where("is_del = ?", 0).Find(&users).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return users, nil
|
||||
}
|
||||
|
||||
func (u *User) Create(db *gorm.DB) (*User, error) {
|
||||
err := db.Create(&u).Error
|
||||
|
||||
return u, err
|
||||
}
|
||||
|
||||
func (u *User) Update(db *gorm.DB) error {
|
||||
return db.Model(&User{}).Where("id = ? AND is_del = ?", u.Model.ID, 0).Save(u).Error
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
package model
|
||||
|
||||
import "gorm.io/gorm"
|
||||
|
||||
type WalletRecharge struct {
|
||||
*Model
|
||||
UserID int64 `json:"user_id"`
|
||||
Amount int64 `json:"amount"`
|
||||
TradeNo string `json:"trade_no"`
|
||||
TradeStatus string `json:"trade_status"`
|
||||
}
|
||||
|
||||
func (p *WalletRecharge) Get(db *gorm.DB) (*WalletRecharge, error) {
|
||||
var pas WalletRecharge
|
||||
if p.Model != nil && p.ID > 0 {
|
||||
db = db.Where("id = ? AND is_del = ?", p.ID, 0)
|
||||
}
|
||||
if p.UserID > 0 {
|
||||
db = db.Where("user_id = ?", p.UserID)
|
||||
}
|
||||
|
||||
err := db.First(&pas).Error
|
||||
if err != nil {
|
||||
return &pas, err
|
||||
}
|
||||
|
||||
return &pas, nil
|
||||
}
|
||||
|
||||
func (p *WalletRecharge) Create(db *gorm.DB) (*WalletRecharge, error) {
|
||||
err := db.Create(&p).Error
|
||||
|
||||
return p, err
|
||||
}
|
@ -0,0 +1,83 @@
|
||||
package model
|
||||
|
||||
import "gorm.io/gorm"
|
||||
|
||||
type WalletStatement struct {
|
||||
*Model
|
||||
UserID int64 `json:"user_id"`
|
||||
ChangeAmount int64 `json:"change_amount"`
|
||||
BalanceSnapshot int64 `json:"balance_snapshot"`
|
||||
Reason string `json:"reason"`
|
||||
PostID int64 `json:"post_id"`
|
||||
}
|
||||
|
||||
func (w *WalletStatement) Get(db *gorm.DB) (*WalletStatement, error) {
|
||||
var ws WalletStatement
|
||||
if w.Model != nil && w.ID > 0 {
|
||||
db = db.Where("id = ? AND is_del = ?", w.ID, 0)
|
||||
}
|
||||
if w.PostID > 0 {
|
||||
db = db.Where("post_id = ?", w.PostID)
|
||||
}
|
||||
if w.UserID > 0 {
|
||||
db = db.Where("user_id = ?", w.UserID)
|
||||
}
|
||||
|
||||
err := db.First(&ws).Error
|
||||
if err != nil {
|
||||
return &ws, err
|
||||
}
|
||||
|
||||
return &ws, nil
|
||||
}
|
||||
|
||||
func (w *WalletStatement) Create(db *gorm.DB) (*WalletStatement, error) {
|
||||
err := db.Create(&w).Error
|
||||
|
||||
return w, err
|
||||
}
|
||||
|
||||
func (w *WalletStatement) List(db *gorm.DB, conditions *ConditionsT, offset, limit int) ([]*WalletStatement, error) {
|
||||
var records []*WalletStatement
|
||||
var err error
|
||||
if offset >= 0 && limit > 0 {
|
||||
db = db.Offset(offset).Limit(limit)
|
||||
}
|
||||
if w.UserID > 0 {
|
||||
db = db.Where("user_id = ?", w.UserID)
|
||||
}
|
||||
|
||||
for k, v := range *conditions {
|
||||
if k == "ORDER" {
|
||||
db = db.Order(v)
|
||||
} else {
|
||||
db = db.Where(k, v)
|
||||
}
|
||||
}
|
||||
|
||||
if err = db.Where("is_del = ?", 0).Find(&records).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return records, nil
|
||||
}
|
||||
|
||||
func (w *WalletStatement) Count(db *gorm.DB, conditions *ConditionsT) (int64, error) {
|
||||
var count int64
|
||||
if w.PostID > 0 {
|
||||
db = db.Where("post_id = ?", w.PostID)
|
||||
}
|
||||
if w.UserID > 0 {
|
||||
db = db.Where("user_id = ?", w.UserID)
|
||||
}
|
||||
for k, v := range *conditions {
|
||||
if k != "ORDER" {
|
||||
db = db.Where(k, v)
|
||||
}
|
||||
}
|
||||
if err := db.Model(w).Count(&count).Error; err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return count, nil
|
||||
}
|
@ -0,0 +1,144 @@
|
||||
// Code generated by go-mir. DO NOT EDIT.
|
||||
|
||||
package v1
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"net/http"
|
||||
|
||||
gin "github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
type AgentInfo struct {
|
||||
Platform string `json:"platform"`
|
||||
UserAgent string `json:"user_agent"`
|
||||
}
|
||||
|
||||
type ServerInfo struct {
|
||||
ApiVer string `json:"api_ver"`
|
||||
}
|
||||
|
||||
type UserInfo struct {
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
type LoginReq struct {
|
||||
AgentInfo AgentInfo `json:"agent_info"`
|
||||
Name string `json:"name"`
|
||||
Passwd string `json:"passwd"`
|
||||
}
|
||||
|
||||
type LoginResp struct {
|
||||
UserInfo
|
||||
ServerInfo ServerInfo `json:"server_info"`
|
||||
JwtToken string `json:"jwt_token"`
|
||||
}
|
||||
|
||||
type WebCore interface {
|
||||
// Chain provide handlers chain for gin
|
||||
Chain() gin.HandlersChain
|
||||
|
||||
Index(c *gin.Context) error
|
||||
Articles(c *gin.Context) error
|
||||
Login(c *gin.Context, req *LoginReq) (*LoginResp, error)
|
||||
Logout(c *gin.Context) error
|
||||
|
||||
mustEmbedUnimplementedWebCoreServant()
|
||||
}
|
||||
|
||||
type WebCoreBinding interface {
|
||||
BindLogin(c *gin.Context) (*LoginReq, error)
|
||||
|
||||
mustEmbedUnimplementedWebCoreBinding()
|
||||
}
|
||||
|
||||
type WebCoreRender interface {
|
||||
RenderIndex(c *gin.Context, err error)
|
||||
RenderArticles(c *gin.Context, err error)
|
||||
RenderLogin(c *gin.Context, data *LoginResp, err error)
|
||||
RenderLogout(c *gin.Context, err error)
|
||||
|
||||
mustEmbedUnimplementedWebCoreRender()
|
||||
}
|
||||
|
||||
// RegisterWebCoreServant register WebCore servant to gin
|
||||
func RegisterWebCoreServant(e *gin.Engine, s WebCore, b WebCoreBinding, r WebCoreRender) {
|
||||
router := e.Group("v1")
|
||||
// use chain for router
|
||||
middlewares := s.Chain()
|
||||
router.Use(middlewares...)
|
||||
|
||||
// register routes info to router
|
||||
router.Handle("GET", "/index/", func(c *gin.Context) {
|
||||
r.RenderIndex(c, s.Index(c))
|
||||
})
|
||||
router.Handle("GET", "/articles/:category/", func(c *gin.Context) {
|
||||
r.RenderArticles(c, s.Articles(c))
|
||||
})
|
||||
router.Handle("POST", "/user/login/", func(c *gin.Context) {
|
||||
req, err := b.BindLogin(c)
|
||||
if err != nil {
|
||||
r.RenderLogin(c, nil, err)
|
||||
}
|
||||
resp, err := s.Login(c, req)
|
||||
r.RenderLogin(c, resp, err)
|
||||
})
|
||||
router.Handle("POST", "/user/logout/", func(c *gin.Context) {
|
||||
r.RenderLogout(c, s.Logout(c))
|
||||
})
|
||||
}
|
||||
|
||||
// UnimplementedWebCoreServant can be embedded to have forward compatible implementations.
|
||||
type UnimplementedWebCoreServant struct{}
|
||||
|
||||
// UnimplementedWebCoreBinding can be embedded to have forward compatible implementations.
|
||||
type UnimplementedWebCoreBinding struct{}
|
||||
|
||||
// UnimplementedWebCoreRender can be embedded to have forward compatible implementations.
|
||||
type UnimplementedWebCoreRender struct{}
|
||||
|
||||
func (UnimplementedWebCoreServant) Chain() gin.HandlersChain {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (UnimplementedWebCoreServant) Index(c *gin.Context) error {
|
||||
return errors.New("method Index not implemented")
|
||||
}
|
||||
|
||||
func (UnimplementedWebCoreServant) Articles(c *gin.Context) error {
|
||||
return errors.New("method Index not implemented")
|
||||
}
|
||||
|
||||
func (UnimplementedWebCoreServant) Login(c *gin.Context, req *LoginReq) (*LoginResp, error) {
|
||||
return nil, errors.New("method Login not implemented")
|
||||
}
|
||||
|
||||
func (UnimplementedWebCoreServant) Logout(c *gin.Context) error {
|
||||
return errors.New("method Logout not implemented")
|
||||
}
|
||||
|
||||
func (UnimplementedWebCoreServant) mustEmbedUnimplementedWebCoreServant() {}
|
||||
|
||||
func (UnimplementedWebCoreBinding) BindLogin(c *gin.Context) (*LoginReq, error) {
|
||||
return nil, errors.New("method BindLogin not implemented")
|
||||
}
|
||||
|
||||
func (UnimplementedWebCoreBinding) mustEmbedUnimplementedWebCoreBinding() {}
|
||||
|
||||
func (UnimplementedWebCoreRender) RenderIndex(c *gin.Context, err error) {
|
||||
c.String(http.StatusInternalServerError, "method RenderLogout not implemented")
|
||||
}
|
||||
|
||||
func (UnimplementedWebCoreRender) RenderArticles(c *gin.Context, err error) {
|
||||
c.String(http.StatusInternalServerError, "method RenderLogout not implemented")
|
||||
}
|
||||
|
||||
func (UnimplementedWebCoreRender) RenderLogin(c *gin.Context, data *LoginResp, err error) {
|
||||
c.String(http.StatusInternalServerError, "method RenderLogin not implemented")
|
||||
}
|
||||
|
||||
func (UnimplementedWebCoreRender) RenderLogout(c *gin.Context, err error) {
|
||||
c.String(http.StatusInternalServerError, "method RenderLogout not implemented")
|
||||
}
|
||||
|
||||
func (UnimplementedWebCoreRender) mustEmbedUnimplementedWebCoreRender() {}
|
@ -0,0 +1,24 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
|
||||
. "github.com/alimy/mir/v3/core"
|
||||
. "github.com/alimy/mir/v3/engine"
|
||||
|
||||
_ "github.com/rocboss/paopao-ce/internal/mirc/routes/v1"
|
||||
)
|
||||
|
||||
//go:generate go run main.go
|
||||
func main() {
|
||||
log.Println("generate code start")
|
||||
opts := Options{
|
||||
RunMode(InSerialMode),
|
||||
GeneratorName(GeneratorGin),
|
||||
SinkPath("auto"),
|
||||
}
|
||||
if err := Generate(opts); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
log.Println("generate code finish")
|
||||
}
|
@ -0,0 +1 @@
|
||||
### RESTful API for paopao-ce
|
@ -0,0 +1,15 @@
|
||||
package v1
|
||||
|
||||
import (
|
||||
. "github.com/alimy/mir/v3"
|
||||
. "github.com/alimy/mir/v3/engine"
|
||||
)
|
||||
|
||||
func init() {
|
||||
AddEntry(new(LocalOSS))
|
||||
}
|
||||
|
||||
type LocalOSS struct {
|
||||
Chain Chain `mir:"-"`
|
||||
Group Group `mir:"v1"`
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package v1
|
||||
|
||||
import (
|
||||
. "github.com/alimy/mir/v3"
|
||||
. "github.com/alimy/mir/v3/engine"
|
||||
)
|
||||
|
||||
func init() {
|
||||
AddEntry(new(WebAdmin))
|
||||
}
|
||||
|
||||
type WebAdmin struct {
|
||||
Chain Chain `mir:"-"`
|
||||
Group Group `mir:"v1"`
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package v1
|
||||
|
||||
import (
|
||||
. "github.com/alimy/mir/v3"
|
||||
. "github.com/alimy/mir/v3/engine"
|
||||
)
|
||||
|
||||
func init() {
|
||||
AddEntry(new(WebAlipay))
|
||||
}
|
||||
|
||||
type WebAlipay struct {
|
||||
Chain Chain `mir:"-"`
|
||||
Group Group `mir:"v1"`
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
package v1
|
||||
|
||||
import (
|
||||
. "github.com/alimy/mir/v3"
|
||||
. "github.com/alimy/mir/v3/engine"
|
||||
)
|
||||
|
||||
func init() {
|
||||
AddEntry(new(WebCore))
|
||||
}
|
||||
|
||||
type AgentInfo struct {
|
||||
Platform string `json:"platform"`
|
||||
UserAgent string `json:"user_agent"`
|
||||
}
|
||||
|
||||
type ServerInfo struct {
|
||||
ApiVer string `json:"api_ver"`
|
||||
}
|
||||
|
||||
type UserInfo struct {
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
type LoginReq struct {
|
||||
AgentInfo AgentInfo `json:"agent_info"`
|
||||
Name string `json:"name"`
|
||||
Passwd string `json:"passwd"`
|
||||
}
|
||||
|
||||
type LoginResp struct {
|
||||
UserInfo
|
||||
ServerInfo ServerInfo `json:"server_info"`
|
||||
JwtToken string `json:"jwt_token"`
|
||||
}
|
||||
|
||||
type WebCore struct {
|
||||
Chain Chain `mir:"-"`
|
||||
Group Group `mir:"v1"`
|
||||
Index func(Get) `mir:"/index/"`
|
||||
Articles func(Get) `mir:"/articles/:category/"`
|
||||
Login func(Post, LoginReq) LoginResp `mir:"/user/login/"`
|
||||
Logout func(Post) `mir:"/user/logout/"`
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package v1
|
||||
|
||||
import (
|
||||
. "github.com/alimy/mir/v3"
|
||||
. "github.com/alimy/mir/v3/engine"
|
||||
)
|
||||
|
||||
func init() {
|
||||
AddEntry(new(WebFollowship))
|
||||
}
|
||||
|
||||
type WebFollowship struct {
|
||||
Chain Chain `mir:"-"`
|
||||
Group Group `mir:"v1"`
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package v1
|
||||
|
||||
import (
|
||||
. "github.com/alimy/mir/v3"
|
||||
. "github.com/alimy/mir/v3/engine"
|
||||
)
|
||||
|
||||
func init() {
|
||||
AddEntry(new(WebFriendship))
|
||||
}
|
||||
|
||||
type WebFriendship struct {
|
||||
Chain Chain `mir:"-"`
|
||||
Group Group `mir:"v1"`
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package v1
|
||||
|
||||
import (
|
||||
. "github.com/alimy/mir/v3"
|
||||
. "github.com/alimy/mir/v3/engine"
|
||||
)
|
||||
|
||||
func init() {
|
||||
AddEntry(new(WebLoose))
|
||||
}
|
||||
|
||||
type WebLoose struct {
|
||||
Chain Chain `mir:"-"`
|
||||
Group Group `mir:"v1"`
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package v1
|
||||
|
||||
import (
|
||||
. "github.com/alimy/mir/v3"
|
||||
. "github.com/alimy/mir/v3/engine"
|
||||
)
|
||||
|
||||
func init() {
|
||||
AddEntry(new(WebPriv))
|
||||
}
|
||||
|
||||
type WebPriv struct {
|
||||
Chain Chain `mir:"-"`
|
||||
Group Group `mir:"v1"`
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package v1
|
||||
|
||||
import (
|
||||
. "github.com/alimy/mir/v3"
|
||||
. "github.com/alimy/mir/v3/engine"
|
||||
)
|
||||
|
||||
func init() {
|
||||
AddEntry(new(WebPub))
|
||||
}
|
||||
|
||||
type WebPub struct {
|
||||
Chain Chain `mir:"-"`
|
||||
Group Group `mir:"v1"`
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
package chain
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/rocboss/paopao-ce/internal/model"
|
||||
"github.com/rocboss/paopao-ce/pkg/app"
|
||||
"github.com/rocboss/paopao-ce/pkg/errcode"
|
||||
)
|
||||
|
||||
func Admin() gin.HandlerFunc {
|
||||
return func(c *gin.Context) {
|
||||
if user, exist := c.Get("USER"); exist {
|
||||
if userModel, ok := user.(*model.User); ok {
|
||||
if userModel.Status == model.UserStatusNormal && userModel.IsAdmin {
|
||||
c.Next()
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
response := app.NewResponse(c)
|
||||
response.ToErrorResponse(errcode.NoAdminPermission)
|
||||
c.Abort()
|
||||
}
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
package chain
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/rocboss/paopao-ce/internal/conf"
|
||||
"github.com/rocboss/paopao-ce/internal/model"
|
||||
"github.com/rocboss/paopao-ce/pkg/app"
|
||||
"github.com/rocboss/paopao-ce/pkg/errcode"
|
||||
)
|
||||
|
||||
func Priv() gin.HandlerFunc {
|
||||
if conf.CfgIf("PhoneBind") {
|
||||
return func(c *gin.Context) {
|
||||
if u, exist := c.Get("USER"); exist {
|
||||
if user, ok := u.(*model.User); ok {
|
||||
if user.Status == model.UserStatusNormal {
|
||||
if user.Phone == "" {
|
||||
response := app.NewResponse(c)
|
||||
response.ToErrorResponse(errcode.AccountNoPhoneBind)
|
||||
c.Abort()
|
||||
return
|
||||
}
|
||||
c.Next()
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
response := app.NewResponse(c)
|
||||
response.ToErrorResponse(errcode.UserHasBeenBanned)
|
||||
c.Abort()
|
||||
}
|
||||
} else {
|
||||
return func(c *gin.Context) {
|
||||
if u, exist := c.Get("USER"); exist {
|
||||
if user, ok := u.(*model.User); ok && user.Status == model.UserStatusNormal {
|
||||
c.Next()
|
||||
return
|
||||
}
|
||||
}
|
||||
response := app.NewResponse(c)
|
||||
response.ToErrorResponse(errcode.UserHasBeenBanned)
|
||||
c.Abort()
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package servants
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/rocboss/paopao-ce/internal/model"
|
||||
)
|
||||
|
||||
type baseServant struct {
|
||||
// TODO
|
||||
}
|
||||
|
||||
type baseBinding struct {
|
||||
// TODO
|
||||
}
|
||||
|
||||
type baseRender struct {
|
||||
// TODO
|
||||
}
|
||||
|
||||
func (baseServant) userFrom(c *gin.Context) (*model.User, bool) {
|
||||
if u, exists := c.Get("USER"); exists {
|
||||
user, ok := u.(*model.User)
|
||||
return user, ok
|
||||
}
|
||||
return nil, false
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
package servants
|
||||
|
||||
type localossSrv struct {
|
||||
// TODO
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package servants
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
|
||||
api "github.com/rocboss/paopao-ce/internal/mirc/auto/api/v1"
|
||||
)
|
||||
|
||||
// RegisterServants register all the servants to gin.Engine
|
||||
func RegisterServants(e *gin.Engine) {
|
||||
api.RegisterWebCoreServant(e, newWebCoreSrv(), newWebCoreBinding(), newWebCoreRender())
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
package servants
|
||||
|
||||
type webAdminSrv struct {
|
||||
// TODO
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
package servants
|
||||
|
||||
type webAlipaySrv struct {
|
||||
// TODO
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
package servants
|
||||
|
||||
import (
|
||||
api "github.com/rocboss/paopao-ce/internal/mirc/auto/api/v1"
|
||||
)
|
||||
|
||||
type webCoreSrv struct {
|
||||
baseServant
|
||||
api.UnimplementedWebCoreServant
|
||||
}
|
||||
|
||||
type webCoreBinding struct {
|
||||
baseBinding
|
||||
api.UnimplementedWebCoreBinding
|
||||
}
|
||||
|
||||
type webCoreRender struct {
|
||||
baseRender
|
||||
api.UnimplementedWebCoreRender
|
||||
}
|
||||
|
||||
func newWebCoreSrv() api.WebCore {
|
||||
return &webCoreSrv{}
|
||||
}
|
||||
|
||||
func newWebCoreBinding() api.WebCoreBinding {
|
||||
return &webCoreBinding{}
|
||||
}
|
||||
|
||||
func newWebCoreRender() api.WebCoreRender {
|
||||
return &webCoreRender{}
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
package servants
|
||||
|
||||
type webFollowshipSrv struct {
|
||||
// TODO
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
package servants
|
||||
|
||||
type webFriendshipSrv struct {
|
||||
// TODO
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
package servants
|
||||
|
||||
type webLooseSrv struct {
|
||||
// TODO
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
package servants
|
||||
|
||||
type webPrivSrv struct {
|
||||
// TODO
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
package servants
|
||||
|
||||
type webPubSrv struct {
|
||||
// TODO
|
||||
}
|
Loading…
Reference in new issue