2021-12-15 17:36:56 +08:00
package model
import (
"SciencesServer/app/common/model"
"SciencesServer/serve/orm"
"fmt"
)
// ActivityInstance 活动信息数据
type ActivityInstance struct {
* model . ActivityInstance
}
type (
// ActivityInstanceInfo 活动信息
ActivityInstanceInfo struct {
model . Model
model . Image
* model . ActivityInstanceBasic
JoinID uint64 ` json:"-" `
JoinCount int ` json:"join_count" `
}
// ActivityInstanceDetail 活动详细信息
ActivityInstanceDetail struct {
* model . ActivityInstance
JoinID uint64 ` json:"-" `
JoinCount int ` json:"join_count" `
}
)
// Activity 活动信息
2022-01-13 17:48:41 +08:00
func ( m * ActivityInstance ) Activity ( uid uint64 , identity , page , pageSize int , count * int64 , where ... * model . ModelWhere ) ( [ ] * ActivityInstanceInfo , error ) {
2021-12-15 17:36:56 +08:00
mActivityJoin := model . NewActivityJoin ( )
db := orm . GetDB ( ) . Table ( m . TableName ( ) + " AS a" ) .
Select ( "a.id" , "a.title" , "a.image" , "a.begin_at" , "a.finish_at" , "a.join_deadline" ,
"IFNULL(u.id, 0) AS join_id" , "j.count AS join_count" ) .
2022-01-13 17:48:41 +08:00
Joins ( fmt . Sprintf ( "LEFT JOIN %s u ON a.id = u.activity_id AND u.uid = %d AND u.identity = %d AND u.status = %d AND u.is_deleted = %d" ,
mActivityJoin . TableName ( ) , uid , identity , model . ActivityJoinStatusForSuccess , model . DeleteStatusForNot ) ) .
2021-12-15 17:36:56 +08:00
Joins ( fmt . Sprintf ( "LEFT JOIN (SELECT activity_id, COUNT(id) AS count FROM %s WHERE status = %d AND is_deleted = %d GROUP BY activity_id) AS j ON a.id = j.activity_id" ,
mActivityJoin . TableName ( ) , model . ActivityJoinStatusForSuccess , model . DeleteStatusForNot ) ) .
Where ( "a.status = ?" , model . ActivityInstanceStatusForShow ) .
Where ( "a.is_deleted = ?" , model . DeleteStatusForNot )
if len ( where ) > 0 {
for _ , v := range where {
db = db . Where ( v . Condition , v . Value )
}
}
out := make ( [ ] * ActivityInstanceInfo , 0 )
if err := db . Count ( count ) . Error ; err != nil {
return nil , err
}
if err := db . Order ( "a.id " + model . OrderModeToDesc ) . Offset ( ( page - 1 ) * pageSize ) . Limit ( pageSize ) . Scan ( & out ) . Error ; err != nil {
return nil , err
}
return out , nil
}
// Detail 详细信息
2022-01-13 17:48:41 +08:00
func ( m * ActivityInstance ) Detail ( id , uid uint64 , identity int ) ( * ActivityInstanceDetail , error ) {
2021-12-15 17:36:56 +08:00
mActivityJoin := model . NewActivityJoin ( )
db := orm . GetDB ( ) . Table ( m . TableName ( ) + " AS a" ) .
2022-01-15 11:54:05 +08:00
Select ( "a.*" , "IFNULL(u.id, 0) AS join_id" , "j.count AS join_count" ) .
2022-01-13 17:48:41 +08:00
Joins ( fmt . Sprintf ( "LEFT JOIN %s u ON a.id = u.activity_id AND u.uid = %d AND u.identity = %d AND u.status = %d AND u.is_deleted = %d" ,
mActivityJoin . TableName ( ) , uid , identity , model . ActivityJoinStatusForSuccess , model . DeleteStatusForNot ) ) .
2021-12-15 17:36:56 +08:00
Joins ( fmt . Sprintf ( "LEFT JOIN (SELECT activity_id, COUNT(id) AS count FROM %s WHERE status = %d AND is_deleted = %d GROUP BY activity_id) AS j ON a.id = j.activity_id" ,
mActivityJoin . TableName ( ) , model . ActivityJoinStatusForSuccess , model . DeleteStatusForNot ) ) .
Where ( "a.id = ?" , id )
out := new ( ActivityInstanceDetail )
err := db . Scan ( & out ) . Error
return out , err
}
func NewActivityInstance ( ) * ActivityInstance {
return & ActivityInstance { model . NewActivityInstance ( ) }
}