go项目脚手架
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
sorbet/internal/services/company/controller/company_employee_controller.go

79 lines
1.8 KiB

package controller
import (
"errors"
"github.com/labstack/echo/v4"
"gorm.io/gorm"
"sorbet/internal/entities"
"sorbet/internal/errs"
"sorbet/internal/repositories"
"sorbet/internal/services/company/request"
"sorbet/pkg/crud"
"sorbet/pkg/db"
"sorbet/pkg/rsp"
"sorbet/pkg/wx"
)
type CompanyEmployeeController struct {
crud.Controller[entities.CompanyEmployee, request.CompanyEmployeeUpsertRequest]
}
func (ctr *CompanyEmployeeController) InitRoutes(r *echo.Group) {
ctr.RegisterRoutes("/company/employees", r)
}
func (ctr *CompanyEmployeeController) RegisterRoutes(path string, r *echo.Group) {
ctr.Controller.RegisterRoutes(path, r)
r.POST(path+"/auth/login", ctr.Login)
}
// Login 员工登录
func (ctr *CompanyEmployeeController) Login(c echo.Context) error {
var req struct {
Code string `json:"code" xml:"code" form:"code"`
}
if err := c.Bind(&req); err != nil {
return err
}
login, err := wx.Login(c.Request().Context(), req.Code)
if err != nil {
return err
}
if err = login.Err(); err != nil {
return err
}
employee, ticketString, err := repositories.
NewCompanyAuthTicketRepository(ctr.MustORM(c)).
GenerateForWechat(c.Request().Context(), login.Openid)
if err != nil {
if !errors.Is(err, gorm.ErrRecordNotFound) {
return err
}
// 微信尚未绑定
return errs.ErrWechatNotBound.WithData(echo.Map{
"openid": login.Openid,
})
}
var companies []*entities.Company
err = ctr.MustORM(c).
Model(&entities.Company{}).
Where(
"EXISTS(?)",
db.Model(&entities.CompanyEmployee{}).Where("wechat_openid=?", employee.WechatOpenid),
).
Find(&companies).
Error
if err != nil {
return err
}
return rsp.Ok(c, echo.Map{
"ticket": ticketString,
"openid": login.Openid,
"companies": companies,
"employee": employee,
})
}