201 lines
4.6 KiB
Go
201 lines
4.6 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
|
|
"git.itzana.me/strafesnet/maps-service/pkg/api"
|
|
"git.itzana.me/strafesnet/maps-service/pkg/datastore"
|
|
"git.itzana.me/strafesnet/maps-service/pkg/model"
|
|
)
|
|
|
|
// CreateMapfixAuditComment implements createMapfixAuditComment operation.
|
|
//
|
|
// Post a comment to the audit log
|
|
//
|
|
// POST /mapfixes/{MapfixID}/comment
|
|
func (svc *Service) CreateMapfixAuditComment(ctx context.Context, req api.CreateMapfixAuditCommentReq, params api.CreateMapfixAuditCommentParams) (error) {
|
|
userInfo, ok := ctx.Value("UserInfo").(UserInfoHandle)
|
|
if !ok {
|
|
return ErrUserInfo
|
|
}
|
|
|
|
has_role, err := userInfo.HasRoleMapfixReview()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if !has_role {
|
|
return ErrPermissionDeniedNeedRoleMapfixReview
|
|
}
|
|
|
|
userId, err := userInfo.GetUserID()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
data := []byte{}
|
|
_, err = req.Read(data)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
Comment := string(data)
|
|
|
|
event_data := model.AuditEventDataComment{
|
|
Comment: Comment,
|
|
}
|
|
|
|
EventData, err := json.Marshal(event_data)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
_, err = svc.DB.AuditEvents().Create(ctx, model.AuditEvent{
|
|
ID: 0,
|
|
User: userId,
|
|
ResourceType: model.ResourceMapfix,
|
|
ResourceID: params.MapfixID,
|
|
EventType: model.AuditEventTypeComment,
|
|
EventData: EventData,
|
|
})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// ListMapfixAuditEvents invokes listMapfixAuditEvents operation.
|
|
//
|
|
// Retrieve a list of audit events.
|
|
//
|
|
// GET /mapfixes/{MapfixID}/audit-events
|
|
func (svc *Service) ListMapfixAuditEvents(ctx context.Context, params api.ListMapfixAuditEventsParams) ([]api.AuditEvent, error) {
|
|
filter := datastore.Optional()
|
|
|
|
filter.Add("resource_type", model.ResourceMapfix)
|
|
filter.Add("resource_id", params.MapfixID)
|
|
|
|
items, err := svc.DB.AuditEvents().List(ctx, filter, model.Page{
|
|
Number: params.Page,
|
|
Size: params.Limit,
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var resp []api.AuditEvent
|
|
for _, item := range items {
|
|
EventData := api.AuditEventEventData{}
|
|
err = EventData.UnmarshalJSON(item.EventData)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
resp = append(resp, api.AuditEvent{
|
|
ID: item.ID,
|
|
Date: item.CreatedAt.Unix(),
|
|
User: int64(item.User),
|
|
ResourceType: int32(item.ResourceType),
|
|
ResourceID: item.ResourceID,
|
|
EventType: int32(item.EventType),
|
|
EventData: EventData,
|
|
})
|
|
}
|
|
|
|
return resp, nil
|
|
}
|
|
|
|
// CreateSubmissionAuditComment implements createSubmissionAuditComment operation.
|
|
//
|
|
// Post a comment to the audit log
|
|
//
|
|
// POST /submissions/{SubmissionID}/comment
|
|
func (svc *Service) CreateSubmissionAuditComment(ctx context.Context, req api.CreateSubmissionAuditCommentReq, params api.CreateSubmissionAuditCommentParams) (error) {
|
|
userInfo, ok := ctx.Value("UserInfo").(UserInfoHandle)
|
|
if !ok {
|
|
return ErrUserInfo
|
|
}
|
|
|
|
has_role, err := userInfo.HasRoleSubmissionReview()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if !has_role {
|
|
return ErrPermissionDeniedNeedRoleSubmissionReview
|
|
}
|
|
|
|
userId, err := userInfo.GetUserID()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
data := []byte{}
|
|
_, err = req.Read(data)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
Comment := string(data)
|
|
|
|
event_data := model.AuditEventDataComment{
|
|
Comment: Comment,
|
|
}
|
|
|
|
EventData, err := json.Marshal(event_data)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
_, err = svc.DB.AuditEvents().Create(ctx, model.AuditEvent{
|
|
ID: 0,
|
|
User: userId,
|
|
ResourceType: model.ResourceSubmission,
|
|
ResourceID: params.SubmissionID,
|
|
EventType: model.AuditEventTypeComment,
|
|
EventData: EventData,
|
|
})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// ListSubmissionAuditEvents invokes listSubmissionAuditEvents operation.
|
|
//
|
|
// Retrieve a list of audit events.
|
|
//
|
|
// GET /submissions/{SubmissionID}/audit-events
|
|
func (svc *Service) ListSubmissionAuditEvents(ctx context.Context, params api.ListSubmissionAuditEventsParams) ([]api.AuditEvent, error) {
|
|
filter := datastore.Optional()
|
|
|
|
filter.Add("resource_type", model.ResourceSubmission)
|
|
filter.Add("resource_id", params.SubmissionID)
|
|
|
|
items, err := svc.DB.AuditEvents().List(ctx, filter, model.Page{
|
|
Number: params.Page,
|
|
Size: params.Limit,
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var resp []api.AuditEvent
|
|
for _, item := range items {
|
|
EventData := api.AuditEventEventData{}
|
|
err = EventData.UnmarshalJSON(item.EventData)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
resp = append(resp, api.AuditEvent{
|
|
ID: item.ID,
|
|
Date: item.CreatedAt.Unix(),
|
|
User: int64(item.User),
|
|
ResourceType: int32(item.ResourceType),
|
|
ResourceID: item.ResourceID,
|
|
EventType: int32(item.EventType),
|
|
EventData: EventData,
|
|
})
|
|
}
|
|
|
|
return resp, nil
|
|
}
|