// Copyright (c) Abstract Machines // SPDX-License-Identifier: Apache-2.0 package api import ( "context" "github.com/absmach/magistrala/alarms" apiutil "github.com/absmach/magistrala/api/http/util" "github.com/absmach/magistrala/pkg/authn" "github.com/absmach/magistrala/pkg/errors" svcerr "github.com/absmach/magistrala/pkg/errors/service" "github.com/go-kit/kit/endpoint" ) func updateAlarmEndpoint(svc alarms.Service) endpoint.Endpoint { return func(ctx context.Context, request any) (any, error) { req := request.(updateAlarmReq) if err := req.validate(); err != nil { return alarmRes{}, errors.Wrap(apiutil.ErrValidation, err) } session, ok := ctx.Value(authn.SessionKey).(authn.Session) if !ok { return alarmRes{}, svcerr.ErrAuthorization } alarm, err := svc.UpdateAlarm(ctx, session, req.Alarm) if err != nil { return alarmRes{}, err } return alarmRes{ Alarm: alarm, }, nil } } func viewAlarmEndpoint(svc alarms.Service) endpoint.Endpoint { return func(ctx context.Context, request any) (any, error) { req := request.(alarmReq) if err := req.validate(); err != nil { return alarmRes{}, errors.Wrap(apiutil.ErrValidation, err) } session, ok := ctx.Value(authn.SessionKey).(authn.Session) if !ok { return alarmRes{}, svcerr.ErrAuthorization } alarm, err := svc.ViewAlarm(ctx, session, req.ID) if err != nil { return alarmRes{}, err } return alarmRes{ Alarm: alarm, }, nil } } func listAlarmsEndpoint(svc alarms.Service) endpoint.Endpoint { return func(ctx context.Context, request any) (any, error) { req := request.(listAlarmsReq) if err := req.validate(); err != nil { return alarmsPageRes{}, errors.Wrap(apiutil.ErrValidation, err) } session, ok := ctx.Value(authn.SessionKey).(authn.Session) if !ok { return alarmsPageRes{}, svcerr.ErrAuthorization } alarms, err := svc.ListAlarms(ctx, session, req.PageMetadata) if err != nil { return alarmsPageRes{}, err } return alarmsPageRes{ AlarmsPage: alarms, }, nil } } func deleteAlarmEndpoint(svc alarms.Service) endpoint.Endpoint { return func(ctx context.Context, request any) (any, error) { req := request.(alarmReq) if err := req.validate(); err != nil { return alarmRes{}, errors.Wrap(apiutil.ErrValidation, err) } session, ok := ctx.Value(authn.SessionKey).(authn.Session) if !ok { return alarmRes{}, svcerr.ErrAuthorization } if err := svc.DeleteAlarm(ctx, session, req.ID); err != nil { return alarmRes{}, err } return alarmRes{deleted: true}, nil } }