diff --git a/api/dms/service/v1/company_notice.go b/api/dms/service/v1/company_notice.go index 9138f449..8fa9c2a6 100644 --- a/api/dms/service/v1/company_notice.go +++ b/api/dms/service/v1/company_notice.go @@ -2,14 +2,26 @@ package v1 import ( base "github.com/actiontech/dms/pkg/dms-common/api/base/v1" + "time" ) +// swagger:parameters GetCompanyNotice +type GetCompanyNoticeReq struct { + // When true, return the latest notice record regardless of the display time window (e.g. expired or not yet started); intended for admin edit forms. + // in: query + IncludeLatestOutsidePeriod bool `query:"include_latest_outside_period" json:"include_latest_outside_period"` +} + // A companynotice type CompanyNotice struct { // companynotice info NoticeStr string `json:"notice_str"` // current user has been read ReadByCurrentUser bool `json:"read_by_current_user"` + // notice show start time + StartTime *time.Time `json:"start_time,omitempty"` + // notice expire time + ExpireTime *time.Time `json:"expire_time,omitempty"` } // swagger:model GetCompanyNoticeReply @@ -28,5 +40,9 @@ type UpdateCompanyNoticeReq struct { // A companynotice type UpdateCompanyNotice struct { // companynotice info - NoticeStr *string `json:"notice_str" valid:"omitempty"` + NoticeStr *string `json:"notice_str" validate:"required"` + // notice show start time + StartTime *time.Time `json:"start_time" validate:"required"` + // notice show end time + EndTime *time.Time `json:"end_time" validate:"required"` } diff --git a/api/swagger.json b/api/swagger.json index 05a40727..6342d3f4 100644 --- a/api/swagger.json +++ b/api/swagger.json @@ -47,6 +47,15 @@ "CompanyNotice" ], "operationId": "GetCompanyNotice", + "parameters": [ + { + "type": "boolean", + "x-go-name": "IncludeLatestOutsidePeriod", + "description": "when true, return the latest notice regardless of display window (for admin edit)", + "name": "include_latest_outside_period", + "in": "query" + } + ], "responses": { "200": { "description": "GetCompanyNoticeReply", @@ -8017,6 +8026,12 @@ "description": "A companynotice", "type": "object", "properties": { + "expire_time": { + "description": "notice expire time", + "type": "string", + "format": "date-time", + "x-go-name": "ExpireTime" + }, "notice_str": { "description": "companynotice info", "type": "string", @@ -8026,6 +8041,12 @@ "description": "current user has been read", "type": "boolean", "x-go-name": "ReadByCurrentUser" + }, + "start_time": { + "description": "notice show start time", + "type": "string", + "format": "date-time", + "x-go-name": "StartTime" } }, "x-go-package": "github.com/actiontech/dms/api/dms/service/v1" @@ -9257,7 +9278,7 @@ "x-go-name": "Users" } }, - "x-go-package": "github.com/actiontech/dms/pkg/dms-common/api/dms/v1" + "x-go-package": "github.com/actiontech/dms/api/dms/service/v1" }, "GetMemberGroupReply": { "type": "object", @@ -14222,7 +14243,7 @@ "x-go-name": "Uid" } }, - "x-go-package": "github.com/actiontech/dms/api/dms/service/v1" + "x-go-package": "github.com/actiontech/dms/pkg/dms-common/api/dms/v1" }, "UpdateBusinessTagReq": { "type": "object", @@ -14237,10 +14258,22 @@ "description": "A companynotice", "type": "object", "properties": { + "end_time": { + "description": "notice show end time", + "type": "string", + "format": "date-time", + "x-go-name": "EndTime" + }, "notice_str": { "description": "companynotice info", "type": "string", "x-go-name": "NoticeStr" + }, + "start_time": { + "description": "notice show start time", + "type": "string", + "format": "date-time", + "x-go-name": "StartTime" } }, "x-go-package": "github.com/actiontech/dms/api/dms/service/v1" diff --git a/api/swagger.yaml b/api/swagger.yaml index e6c660b7..fd455c2e 100644 --- a/api/swagger.yaml +++ b/api/swagger.yaml @@ -901,6 +901,11 @@ definitions: CompanyNotice: description: A companynotice properties: + expire_time: + description: notice expire time + format: date-time + type: string + x-go-name: ExpireTime notice_str: description: companynotice info type: string @@ -909,6 +914,11 @@ definitions: description: current user has been read type: boolean x-go-name: ReadByCurrentUser + start_time: + description: notice show start time + format: date-time + type: string + x-go-name: StartTime type: object x-go-package: github.com/actiontech/dms/api/dms/service/v1 ComponentNameWithVersion: @@ -1860,7 +1870,7 @@ definitions: type: array x-go-name: Users type: object - x-go-package: github.com/actiontech/dms/pkg/dms-common/api/dms/v1 + x-go-package: github.com/actiontech/dms/api/dms/service/v1 GetMemberGroupReply: properties: code: @@ -5906,7 +5916,7 @@ definitions: type: string x-go-name: Uid type: object - x-go-package: github.com/actiontech/dms/api/dms/service/v1 + x-go-package: github.com/actiontech/dms/pkg/dms-common/api/dms/v1 UpdateBusinessTagReq: properties: business_tag: @@ -5916,10 +5926,20 @@ definitions: UpdateCompanyNotice: description: A companynotice properties: + end_time: + description: notice show end time + format: date-time + type: string + x-go-name: EndTime notice_str: description: companynotice info type: string x-go-name: NoticeStr + start_time: + description: notice show start time + format: date-time + type: string + x-go-name: StartTime type: object x-go-package: github.com/actiontech/dms/api/dms/service/v1 UpdateCompanyNoticeReq: @@ -6929,6 +6949,12 @@ paths: get: description: get company notice info operationId: GetCompanyNotice + parameters: + - description: when true, return the latest notice regardless of display window (for admin edit) + in: query + name: include_latest_outside_period + type: boolean + x-go-name: IncludeLatestOutsidePeriod responses: "200": description: GetCompanyNoticeReply diff --git a/internal/apiserver/service/dms_controller.go b/internal/apiserver/service/dms_controller.go index fec29273..9c3b21e0 100644 --- a/internal/apiserver/service/dms_controller.go +++ b/internal/apiserver/service/dms_controller.go @@ -3470,20 +3470,36 @@ func (ctl *DMSController) WebHookSendMessage(c echo.Context) error { return NewOkResp(c) } -// swagger:route GET /v1/dms/company_notice CompanyNotice GetCompanyNotice +// swagger:operation GET /v1/dms/company_notice CompanyNotice GetCompanyNotice // // get company notice info // -// responses: -// 200: body:GetCompanyNoticeReply -// default: body:GenericResp +// --- +// parameters: +// - name: include_latest_outside_period +// description: when true, return the latest notice regardless of display window (for admin edit) +// in: query +// required: false +// type: boolean +// responses: +// '200': +// description: GetCompanyNoticeReply +// schema: +// "$ref": "#/definitions/GetCompanyNoticeReply" +// default: +// description: GenericResp +// schema: +// "$ref": "#/definitions/GenericResp" func (ctl *DMSController) GetCompanyNotice(c echo.Context) error { - // get current user id + var req aV1.GetCompanyNoticeReq + if err := bindAndValidateReq(c, &req); err != nil { + return NewErrResp(c, err, apiError.BadRequestErr) + } currentUserUid, err := jwt.GetUserUidStrFromContext(c) if err != nil { return NewErrResp(c, err, apiError.DMSServiceErr) } - reply, err := ctl.DMS.GetCompanyNotice(c.Request().Context(), currentUserUid) + reply, err := ctl.DMS.GetCompanyNotice(c.Request().Context(), currentUserUid, req.IncludeLatestOutsidePeriod) if err != nil { return NewErrResp(c, err, apiError.APIServerErr) } diff --git a/internal/dms/biz/company_notice.go b/internal/dms/biz/company_notice.go index 61492125..d499f707 100644 --- a/internal/dms/biz/company_notice.go +++ b/internal/dms/biz/company_notice.go @@ -2,6 +2,7 @@ package biz import ( "context" + "time" pkgRand "github.com/actiontech/dms/pkg/rand" @@ -14,6 +15,8 @@ type CompanyNotice struct { UID string NoticeStr string ReadUserIds []string + StartTime *time.Time + EndTime *time.Time } func initCompanyNotice() (*CompanyNotice, error) { diff --git a/internal/dms/biz/company_notice_ce.go b/internal/dms/biz/company_notice_ce.go index e002fd39..dab21cad 100644 --- a/internal/dms/biz/company_notice_ce.go +++ b/internal/dms/biz/company_notice_ce.go @@ -5,15 +5,16 @@ package biz import ( "context" "errors" + "time" ) var errNotSupportCompanyNotice = errors.New("company notice related functions are enterprise version functions") -func (d *CompanyNoticeUsecase) UpdateCompanyNotice(ctx context.Context, noticeStr *string) error { +func (d *CompanyNoticeUsecase) UpdateCompanyNotice(ctx context.Context, noticeStr *string, startTime, endTime *time.Time) error { return errNotSupportCompanyNotice } -func (d *CompanyNoticeUsecase) GetCompanyNotice(ctx context.Context, userId string) (notice *CompanyNotice, exist bool, err error) { - return nil, false, errNotSupportCompanyNotice +func (d *CompanyNoticeUsecase) GetCompanyNotice(ctx context.Context, userId string, includeLatestOutsidePeriod bool) (notice *CompanyNotice, err error) { + return nil, errNotSupportCompanyNotice } diff --git a/internal/dms/service/company_notice.go b/internal/dms/service/company_notice.go index 020bd7da..80e2d086 100644 --- a/internal/dms/service/company_notice.go +++ b/internal/dms/service/company_notice.go @@ -6,16 +6,18 @@ import ( dmsV1 "github.com/actiontech/dms/api/dms/service/v1" ) -func (d *DMSService) GetCompanyNotice(ctx context.Context, currentUserUid string) (reply *dmsV1.GetCompanyNoticeReply, err error) { - companyNotice, read, err := d.CompanyNoticeUsecase.GetCompanyNotice(ctx, currentUserUid) +func (d *DMSService) GetCompanyNotice(ctx context.Context, currentUserUid string, includeLatestOutsidePeriod bool) (reply *dmsV1.GetCompanyNoticeReply, err error) { + companyNotice, err := d.CompanyNoticeUsecase.GetCompanyNotice(ctx, currentUserUid, includeLatestOutsidePeriod) if err != nil { return nil, err } data := dmsV1.CompanyNotice{ - ReadByCurrentUser: read, + ReadByCurrentUser: false, } if companyNotice != nil { data.NoticeStr = companyNotice.NoticeStr + data.StartTime = companyNotice.StartTime + data.ExpireTime = companyNotice.EndTime } return &dmsV1.GetCompanyNoticeReply{ Data: data, @@ -23,5 +25,5 @@ func (d *DMSService) GetCompanyNotice(ctx context.Context, currentUserUid string } func (d *DMSService) UpdateCompanyNotice(ctx context.Context, req *dmsV1.UpdateCompanyNoticeReq) (err error) { - return d.CompanyNoticeUsecase.UpdateCompanyNotice(ctx, req.UpdateCompanyNotice.NoticeStr) + return d.CompanyNoticeUsecase.UpdateCompanyNotice(ctx, req.UpdateCompanyNotice.NoticeStr, req.UpdateCompanyNotice.StartTime, req.UpdateCompanyNotice.EndTime) } diff --git a/internal/dms/storage/convert.go b/internal/dms/storage/convert.go index 6107c528..52dc90e0 100644 --- a/internal/dms/storage/convert.go +++ b/internal/dms/storage/convert.go @@ -990,6 +990,8 @@ func convertBizCompanyNotice(b *biz.CompanyNotice) (*model.CompanyNotice, error) }, NoticeStr: b.NoticeStr, ReadUserIds: b.ReadUserIds, + StartTime: b.StartTime, + EndTime: b.EndTime, }, nil } @@ -999,6 +1001,8 @@ func convertModelCompanyNotice(m *model.CompanyNotice) (*biz.CompanyNotice, erro UID: m.UID, NoticeStr: m.NoticeStr, ReadUserIds: m.ReadUserIds, + StartTime: m.StartTime, + EndTime: m.EndTime, } return p, nil diff --git a/internal/dms/storage/model/model.go b/internal/dms/storage/model/model.go index 5a0282e4..7140805e 100644 --- a/internal/dms/storage/model/model.go +++ b/internal/dms/storage/model/model.go @@ -440,6 +440,8 @@ type CompanyNotice struct { Model NoticeStr string `gorm:"type:mediumtext;comment:'企业公告'" json:"notice_str"` ReadUserIds ReadUsers `gorm:"type:longtext" json:"read_user_ids"` + StartTime *time.Time `json:"start_time" gorm:"column:start_time;comment:'公告开始时间'"` + EndTime *time.Time `json:"end_time" gorm:"column:end_time;comment:'公告结束时间'"` } type ReadUsers []string