直接完成
此提交包含在:
73
service/checkin.go
一般檔案
73
service/checkin.go
一般檔案
@@ -0,0 +1,73 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"integrity-checkin/data/po"
|
||||
"integrity-checkin/pkg/app"
|
||||
"strconv"
|
||||
"time"
|
||||
)
|
||||
|
||||
type CheckinService struct {
|
||||
}
|
||||
|
||||
func (c CheckinService) Submit(aw *app.Wrapper) app.Result {
|
||||
uc := aw.ExtractUserClaims()
|
||||
var req po.UserActivityForm
|
||||
if err := aw.Ctx.ShouldBind(&req); err != nil {
|
||||
return aw.Error(err.Error())
|
||||
}
|
||||
if err := req.Validate(); err != nil {
|
||||
return aw.Error(err.Error())
|
||||
}
|
||||
today := time.Now().Format("20060102")
|
||||
if checkinDAO.FindUserActivityByDay(uc.UserID, req.ActivityID, today) != nil {
|
||||
return aw.Error("您今天已参加过该项目,请明天再来")
|
||||
}
|
||||
userActivity, err := checkinDAO.CreateCheckin(uc.UserID, req.ActivityID, req.Image)
|
||||
if err != nil {
|
||||
return aw.Error(err.Error())
|
||||
}
|
||||
return aw.Success(userActivity)
|
||||
}
|
||||
func (c CheckinService) SetStatus(aw *app.Wrapper) app.Result {
|
||||
type SetStatusReq struct {
|
||||
ID int `form:"id" binding:"required"`
|
||||
Status int `form:"status" binding:"required"`
|
||||
Credit int `form:"credit" binding:"required,gte=1"`
|
||||
}
|
||||
var req SetStatusReq
|
||||
if err := aw.Ctx.ShouldBind(&req); err != nil {
|
||||
return aw.Error(err.Error())
|
||||
}
|
||||
userActivity := checkinDAO.FindUserActivityByID(req.ID)
|
||||
if userActivity == nil {
|
||||
return aw.Error("打卡不存在")
|
||||
}
|
||||
if userActivity.Status != 1 {
|
||||
return aw.Error("已经审核过此打卡")
|
||||
}
|
||||
if req.Status == 1 {
|
||||
return aw.Error("只能是 2通过,3拒绝")
|
||||
}
|
||||
if req.Status == 2 { // pass
|
||||
user := userDAO.FindUserByID(userActivity.UserID)
|
||||
user.Credit += req.Credit
|
||||
userDAO.SaveUser(user)
|
||||
}
|
||||
userActivity.Status = req.Status
|
||||
checkinDAO.SaveUserActivity(userActivity)
|
||||
return aw.Success(userActivity)
|
||||
}
|
||||
func (c CheckinService) ListActivities(aw *app.Wrapper) app.Result {
|
||||
return aw.Success(checkinDAO.FindAllActivities())
|
||||
}
|
||||
func (c CheckinService) ListUserActivities(aw *app.Wrapper) app.Result {
|
||||
return aw.Success(checkinDAO.FindAllUserActivities())
|
||||
}
|
||||
func (c CheckinService) GetUserActivity(aw *app.Wrapper) app.Result {
|
||||
id, err := strconv.Atoi(aw.Ctx.Query("id"))
|
||||
if err != nil {
|
||||
return aw.Error(err.Error())
|
||||
}
|
||||
return aw.Success(checkinDAO.FindUserActivityByID(id))
|
||||
}
|
21
service/service.go
一般檔案
21
service/service.go
一般檔案
@@ -0,0 +1,21 @@
|
||||
package service
|
||||
|
||||
import "integrity-checkin/dao"
|
||||
|
||||
var (
|
||||
userDAO dao.UserDAO
|
||||
checkinDAO dao.CheckinDAO
|
||||
)
|
||||
|
||||
var (
|
||||
ExUserService UserService
|
||||
ExCheckinService CheckinService
|
||||
)
|
||||
|
||||
func Setup() {
|
||||
userDAO = dao.UserDAO{Tx: dao.DB}
|
||||
checkinDAO = dao.CheckinDAO{Tx: dao.DB}
|
||||
|
||||
ExUserService = UserService{}
|
||||
ExCheckinService = CheckinService{}
|
||||
}
|
30
service/user.go
一般檔案
30
service/user.go
一般檔案
@@ -0,0 +1,30 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"integrity-checkin/pkg/app"
|
||||
"integrity-checkin/pkg/httpclient"
|
||||
"integrity-checkin/pkg/util"
|
||||
)
|
||||
|
||||
type UserService struct {
|
||||
}
|
||||
|
||||
func (u UserService) Login(aw *app.Wrapper) app.Result {
|
||||
type LoginReq struct {
|
||||
Username string `form:"username" binding:"required"`
|
||||
Password string `form:"password" binding:"required"`
|
||||
}
|
||||
var req LoginReq
|
||||
if err := aw.Ctx.ShouldBind(&req); err != nil {
|
||||
return aw.Error(err.Error())
|
||||
}
|
||||
sduLoginData, err := httpclient.SDULogin(req.Username, req.Password)
|
||||
if err != nil {
|
||||
return aw.Error(err.Error())
|
||||
}
|
||||
user := userDAO.FindUserByUsername(sduLoginData.Username)
|
||||
if user == nil {
|
||||
user = userDAO.CreateUser(sduLoginData.Username, sduLoginData.RealName)
|
||||
}
|
||||
return aw.Success(util.GenerateJWT(user.ID, user.RoleID))
|
||||
}
|
新增問題並參考
封鎖使用者