forked from ebhomengo/niki
Merge pull request 'feat(niki): add get all agents by admin' (#58) from stage/erfan/103-admin-get-all-agent into develop
Reviewed-on: ebhomengo/niki#58
This commit is contained in:
commit
ec81297f98
|
@ -0,0 +1,28 @@
|
||||||
|
package adminhandler
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
httpmsg "git.gocasts.ir/ebhomengo/niki/pkg/http_msg"
|
||||||
|
"github.com/labstack/echo/v4"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GetAllAgent godoc
|
||||||
|
// @Summary Get all agents by admin
|
||||||
|
// @Tags Admin
|
||||||
|
// @Accept json
|
||||||
|
// @Produce json
|
||||||
|
// @Success 200 {object} adminserviceparam.GetAllAgentResponse
|
||||||
|
// @Failure 400 {string} "Bad request"
|
||||||
|
// @Security AuthBearerAdmin
|
||||||
|
// @Router /admins/agents [get]
|
||||||
|
func (h Handler) GetAllAgent(c echo.Context) error {
|
||||||
|
resp, sErr := h.adminSvc.GetAllAgent(c.Request().Context())
|
||||||
|
if sErr != nil {
|
||||||
|
msg, code := httpmsg.Error(sErr)
|
||||||
|
|
||||||
|
return echo.NewHTTPError(code, msg)
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.JSON(http.StatusOK, resp)
|
||||||
|
}
|
|
@ -15,4 +15,5 @@ func (h Handler) SetRoutes(e *echo.Echo) {
|
||||||
r.POST("/login-by-phone", h.LoginByPhoneNumber)
|
r.POST("/login-by-phone", h.LoginByPhoneNumber)
|
||||||
//nolint:gocritic
|
//nolint:gocritic
|
||||||
//r.PATCH("/:id", h.Update).Name = "admin-updatekindboxreq"
|
//r.PATCH("/:id", h.Update).Name = "admin-updatekindboxreq"
|
||||||
|
r.GET("/agents", h.GetAllAgent, middleware.Auth(h.authSvc, h.authConfig), middleware.AdminAuthorization(h.adminAuthorizeSvc, entity.AdminAdminGetAllAgentPermission))
|
||||||
}
|
}
|
||||||
|
|
65
docs/docs.go
65
docs/docs.go
|
@ -463,6 +463,39 @@ const docTemplate = `{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/admins/agents": {
|
||||||
|
"get": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"AuthBearerAdmin": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"Admin"
|
||||||
|
],
|
||||||
|
"summary": "Get all agents by admin",
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/adminserviceparam.GetAllAgentResponse"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"400": {
|
||||||
|
"description": "Bad request",
|
||||||
|
"schema": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/admins/login-by-phone": {
|
"/admins/login-by-phone": {
|
||||||
"post": {
|
"post": {
|
||||||
"consumes": [
|
"consumes": [
|
||||||
|
@ -1075,6 +1108,38 @@ const docTemplate = `{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"adminserviceparam.Agent": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"first_name": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "John"
|
||||||
|
},
|
||||||
|
"id": {
|
||||||
|
"type": "integer",
|
||||||
|
"example": 1
|
||||||
|
},
|
||||||
|
"last_name": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "Doe"
|
||||||
|
},
|
||||||
|
"phone_number": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "09123456789"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"adminserviceparam.GetAllAgentResponse": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"agents": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/adminserviceparam.Agent"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"adminserviceparam.LoginWithPhoneNumberRequest": {
|
"adminserviceparam.LoginWithPhoneNumberRequest": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
|
|
@ -452,6 +452,39 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/admins/agents": {
|
||||||
|
"get": {
|
||||||
|
"security": [
|
||||||
|
{
|
||||||
|
"AuthBearerAdmin": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"Admin"
|
||||||
|
],
|
||||||
|
"summary": "Get all agents by admin",
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/adminserviceparam.GetAllAgentResponse"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"400": {
|
||||||
|
"description": "Bad request",
|
||||||
|
"schema": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/admins/login-by-phone": {
|
"/admins/login-by-phone": {
|
||||||
"post": {
|
"post": {
|
||||||
"consumes": [
|
"consumes": [
|
||||||
|
@ -1064,6 +1097,38 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"adminserviceparam.Agent": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"first_name": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "John"
|
||||||
|
},
|
||||||
|
"id": {
|
||||||
|
"type": "integer",
|
||||||
|
"example": 1
|
||||||
|
},
|
||||||
|
"last_name": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "Doe"
|
||||||
|
},
|
||||||
|
"phone_number": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "09123456789"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"adminserviceparam.GetAllAgentResponse": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"agents": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/adminserviceparam.Agent"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"adminserviceparam.LoginWithPhoneNumberRequest": {
|
"adminserviceparam.LoginWithPhoneNumberRequest": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
|
|
@ -157,6 +157,28 @@ definitions:
|
||||||
- $ref: '#/definitions/entity.AdminStatus'
|
- $ref: '#/definitions/entity.AdminStatus'
|
||||||
example: 1
|
example: 1
|
||||||
type: object
|
type: object
|
||||||
|
adminserviceparam.Agent:
|
||||||
|
properties:
|
||||||
|
first_name:
|
||||||
|
example: John
|
||||||
|
type: string
|
||||||
|
id:
|
||||||
|
example: 1
|
||||||
|
type: integer
|
||||||
|
last_name:
|
||||||
|
example: Doe
|
||||||
|
type: string
|
||||||
|
phone_number:
|
||||||
|
example: "09123456789"
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
adminserviceparam.GetAllAgentResponse:
|
||||||
|
properties:
|
||||||
|
agents:
|
||||||
|
items:
|
||||||
|
$ref: '#/definitions/adminserviceparam.Agent'
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
adminserviceparam.LoginWithPhoneNumberRequest:
|
adminserviceparam.LoginWithPhoneNumberRequest:
|
||||||
properties:
|
properties:
|
||||||
password:
|
password:
|
||||||
|
@ -785,6 +807,26 @@ paths:
|
||||||
summary: Reject a kindboxreq by admin
|
summary: Reject a kindboxreq by admin
|
||||||
tags:
|
tags:
|
||||||
- KindBoxReq
|
- KindBoxReq
|
||||||
|
/admins/agents:
|
||||||
|
get:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/adminserviceparam.GetAllAgentResponse'
|
||||||
|
"400":
|
||||||
|
description: Bad request
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
security:
|
||||||
|
- AuthBearerAdmin: []
|
||||||
|
summary: Get all agents by admin
|
||||||
|
tags:
|
||||||
|
- Admin
|
||||||
/admins/login-by-phone:
|
/admins/login-by-phone:
|
||||||
post:
|
post:
|
||||||
consumes:
|
consumes:
|
||||||
|
|
|
@ -9,4 +9,5 @@ const (
|
||||||
AdminKindBoxReqGetAllPermission = AdminPermission("kindboxreq-getall")
|
AdminKindBoxReqGetAllPermission = AdminPermission("kindboxreq-getall")
|
||||||
AdminKindBoxReqDeliverPermission = AdminPermission("kindboxreq-deliver")
|
AdminKindBoxReqDeliverPermission = AdminPermission("kindboxreq-deliver")
|
||||||
AdminKindBoxReqAssignSenderAgentPermission = AdminPermission("kindboxreq-assign_sender_agent")
|
AdminKindBoxReqAssignSenderAgentPermission = AdminPermission("kindboxreq-assign_sender_agent")
|
||||||
|
AdminAdminGetAllAgentPermission = AdminPermission("admin-getall_agent")
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
package adminserviceparam
|
||||||
|
|
||||||
|
type GetAllAgentResponse struct {
|
||||||
|
Agents []Agent `json:"agents"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Agent struct {
|
||||||
|
ID uint `json:"id" example:"1"`
|
||||||
|
FirstName string `json:"first_name" example:"John"`
|
||||||
|
LastName string `json:"last_name" example:"Doe"`
|
||||||
|
PhoneNumber string `json:"phone_number" example:"09123456789"`
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
package mysqladmin
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"git.gocasts.ir/ebhomengo/niki/entity"
|
||||||
|
|
||||||
|
errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
|
||||||
|
richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (d DB) GetAllAgent(ctx context.Context) ([]entity.Admin, error) {
|
||||||
|
const op = "mysqladmin.GetAllAgent"
|
||||||
|
|
||||||
|
agents := make([]entity.Admin, 0)
|
||||||
|
query := `SELECT id, first_name, last_name, phone_number FROM admins WHERE role = 'agent' AND status = 'active'`
|
||||||
|
rows, err := d.conn.Conn().QueryContext(ctx, query)
|
||||||
|
if err != nil {
|
||||||
|
|
||||||
|
return nil, richerror.New(op).WithErr(err).WithMessage(errmsg.ErrorMsgSomethingWentWrong).WithKind(richerror.KindUnexpected)
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
|
||||||
|
for rows.Next() {
|
||||||
|
var agent entity.Admin
|
||||||
|
sErr := rows.Scan(&agent.ID, &agent.FirstName, &agent.LastName, &agent.PhoneNumber)
|
||||||
|
if err != nil {
|
||||||
|
|
||||||
|
return nil, richerror.New(op).WithErr(sErr).
|
||||||
|
WithMessage(errmsg.ErrorMsgCantScanQueryResult).WithKind(richerror.KindUnexpected)
|
||||||
|
}
|
||||||
|
agents = append(agents, agent)
|
||||||
|
}
|
||||||
|
|
||||||
|
if rErr := rows.Err(); rErr != nil {
|
||||||
|
|
||||||
|
return nil, richerror.New(op).WithErr(rErr).
|
||||||
|
WithMessage(errmsg.ErrorMsgSomethingWentWrong).WithKind(richerror.KindUnexpected)
|
||||||
|
}
|
||||||
|
|
||||||
|
return agents, nil
|
||||||
|
}
|
|
@ -6,7 +6,8 @@ ALTER TABLE `admin_access_controls` MODIFY COLUMN `permission`
|
||||||
'kindboxreq-reject',
|
'kindboxreq-reject',
|
||||||
'kindboxreq-getall',
|
'kindboxreq-getall',
|
||||||
'kindboxreq-deliver',
|
'kindboxreq-deliver',
|
||||||
'kindboxreq-assign_sender_agent'
|
'kindboxreq-assign_sender_agent',
|
||||||
|
'admin-getall_agent'
|
||||||
) NOT NULL;
|
) NOT NULL;
|
||||||
|
|
||||||
-- +migrate Down
|
-- +migrate Down
|
|
@ -11,7 +11,9 @@ INSERT INTO `admin_access_controls` (`id`, `actor_id`, `actor_type`,`permission`
|
||||||
(9, 2 , 'role','kindboxreq-reject'),
|
(9, 2 , 'role','kindboxreq-reject'),
|
||||||
(10, 2 , 'role','kindboxreq-getall'),
|
(10, 2 , 'role','kindboxreq-getall'),
|
||||||
(11, 2 , 'role','kindboxreq-deliver'),
|
(11, 2 , 'role','kindboxreq-deliver'),
|
||||||
(12, 2 , 'role','kindboxreq-assign_sender_agent');
|
(12, 2 , 'role','kindboxreq-assign_sender_agent'),
|
||||||
|
(13, 1, 'role', 'admin-getall_agent'),
|
||||||
|
(13, 2, 'role', 'admin-getall_agent');
|
||||||
|
|
||||||
-- +migrate Down
|
-- +migrate Down
|
||||||
DELETE
|
DELETE
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
package adminservice
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
param "git.gocasts.ir/ebhomengo/niki/param/admin/admin"
|
||||||
|
richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (s Service) GetAllAgent(ctx context.Context) (param.GetAllAgentResponse, error) {
|
||||||
|
const op = "adminservice.GetAllAgent"
|
||||||
|
|
||||||
|
agentsInfo := make([]param.Agent, 0)
|
||||||
|
|
||||||
|
agents, err := s.repo.GetAllAgent(ctx)
|
||||||
|
if err != nil {
|
||||||
|
|
||||||
|
return param.GetAllAgentResponse{}, richerror.New(op).WithErr(err).WithKind(richerror.KindUnexpected)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, agent := range agents {
|
||||||
|
agentsInfo = append(agentsInfo, param.Agent{
|
||||||
|
ID: agent.ID,
|
||||||
|
FirstName: agent.FirstName,
|
||||||
|
LastName: agent.LastName,
|
||||||
|
PhoneNumber: agent.PhoneNumber,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return param.GetAllAgentResponse{Agents: agentsInfo}, nil
|
||||||
|
}
|
|
@ -18,6 +18,7 @@ type Repository interface {
|
||||||
AddAdmin(ctx context.Context, admin entity.Admin) (entity.Admin, error)
|
AddAdmin(ctx context.Context, admin entity.Admin) (entity.Admin, error)
|
||||||
GetAdminByPhoneNumber(ctx context.Context, phoneNumber string) (entity.Admin, error)
|
GetAdminByPhoneNumber(ctx context.Context, phoneNumber string) (entity.Admin, error)
|
||||||
GetAdminByID(ctx context.Context, adminID uint) (entity.Admin, error)
|
GetAdminByID(ctx context.Context, adminID uint) (entity.Admin, error)
|
||||||
|
GetAllAgent(ctx context.Context) ([]entity.Admin, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type Service struct {
|
type Service struct {
|
||||||
|
|
Loading…
Reference in New Issue