diff --git a/salesreportapp/delivery/http/GetReportData.go b/salesreportapp/delivery/http/GetReportData.go new file mode 100644 index 00000000..e9e03bc9 --- /dev/null +++ b/salesreportapp/delivery/http/GetReportData.go @@ -0,0 +1,28 @@ +package http + +import ( + "net/http" + + "git.gocasts.ir/ebhomengo/niki/salesreportapp/param" + "github.com/labstack/echo/v4" +) + +func (s *Server) GetReportData(c echo.Context) error { + var data param.GetReportDataRequest + err := c.Bind(&data) + if err != nil { + return err + } + + reportsData, err := s.SalesReportSvc.GetReportData(data.Filters) + + if err != nil { + return c.JSON(http.StatusInternalServerError, err) + } + return c.JSON(http.StatusOK, echo.Map{ + "status": 200, + "message": "success", + "headers": reportsData.Header, + "data": reportsData.Data, + }) +} diff --git a/salesreportapp/delivery/http/getReportFilters.go b/salesreportapp/delivery/http/getReportFilters.go new file mode 100644 index 00000000..f30ebd3d --- /dev/null +++ b/salesreportapp/delivery/http/getReportFilters.go @@ -0,0 +1,28 @@ +package http + +import ( + "net/http" + + "git.gocasts.ir/ebhomengo/niki/salesreportapp/param" + "github.com/labstack/echo/v4" +) + +func (s *Server) getReportFilters(c echo.Context) error { + + var data param.GetReportFiltersRequest + err := c.Bind(&data) + if err != nil { + return err + } + + reports, err := s.SalesReportSvc.GetReportFilters(data.ReportId) + if err != nil { + return err + } + + return c.JSON(http.StatusOK, echo.Map{ + "statusCode": 200, + "Message": "success", + "filterable_fields": reports, + }) +} diff --git a/salesreportapp/delivery/http/server.go b/salesreportapp/delivery/http/server.go index 1f4bb99d..5c59855f 100644 --- a/salesreportapp/delivery/http/server.go +++ b/salesreportapp/delivery/http/server.go @@ -1,16 +1,21 @@ package http -import httpserver "git.gocasts.ir/ebhomengo/niki/delivery/http_server" +import ( + httpserver "git.gocasts.ir/ebhomengo/niki/delivery/http_server" + salesreportservice "git.gocasts.ir/ebhomengo/niki/salesreportapp/service" +) type Server struct { - HTTPServer *httpserver.Server - Handler *Handler + HTTPServer *httpserver.Server + Handler *Handler + SalesReportSvc salesreportservice.Service } -func NewServer(httpserver *httpserver.Server) *Server { +func NewServer(httpserver *httpserver.Server, SalesReportSvc salesreportservice.Service) *Server { return &Server{ - HTTPServer: httpserver, - Handler: NewHandler(), + HTTPServer: httpserver, + Handler: NewHandler(), + SalesReportSvc: SalesReportSvc, } } diff --git a/salesreportapp/entity/entity.go b/salesreportapp/entity/entity.go new file mode 100644 index 00000000..6e929ab9 --- /dev/null +++ b/salesreportapp/entity/entity.go @@ -0,0 +1,26 @@ +package entity + +type FilterableFields struct { + Name string `json:"name"` + Type string `json:"type"` +} + +type QueryCondition struct { + FieldName string `json:"field_name"` + Operation string `json:"operation"` + Value string `json:"value"` +} + +type GetReportDataResponse struct { + StatusCode int `json:"status"` + Message string `json:"message"` + Header []struct { + Name string `json:"name"` + Type string `json:"type"` + } `json:"header"` + Data [][]struct { + Name string `json:"name"` + Type string `json:"type"` + Value string `json:"value"` + } `json:"data"` +} diff --git a/salesreportapp/param/params.go b/salesreportapp/param/params.go new file mode 100644 index 00000000..33619cb5 --- /dev/null +++ b/salesreportapp/param/params.go @@ -0,0 +1,12 @@ +package param + +import "git.gocasts.ir/ebhomengo/niki/salesreportapp/entity" + +type GetReportFiltersRequest struct { + ReportId int64 `json:"report_id"` +} + +type GetReportDataRequest struct { + ReportID int `json:"reportID"` + Filters []entity.QueryCondition `json:"filters"` +} diff --git a/salesreportapp/readme/step1_Req_getReportFilters.json b/salesreportapp/readme/step1_Req_getReportFilters.json new file mode 100644 index 00000000..8c0a0a69 --- /dev/null +++ b/salesreportapp/readme/step1_Req_getReportFilters.json @@ -0,0 +1,3 @@ +{ + "ReportID": 2 +} \ No newline at end of file diff --git a/salesreportapp/readme/step1_Res_getReportFilters.json b/salesreportapp/readme/step1_Res_getReportFilters.json new file mode 100644 index 00000000..455b956d --- /dev/null +++ b/salesreportapp/readme/step1_Res_getReportFilters.json @@ -0,0 +1,16 @@ +{ + "statusCode": 200, + "Message": "Done", + "Body": { + "filterable_fields": [ + { + "name": "city", + "type": "DateTime" + }, + { + "name": "date", + "type": "DateTime" + } + ] + } +} \ No newline at end of file diff --git a/salesreportapp/readme/step2_Req_getReportData.json b/salesreportapp/readme/step2_Req_getReportData.json new file mode 100644 index 00000000..92b331cc --- /dev/null +++ b/salesreportapp/readme/step2_Req_getReportData.json @@ -0,0 +1,20 @@ +{ + "reportID": 2, + "filters": [ + { + "field_name": "city", + "operation": "=", + "value": "tehran" + }, + { + "field_name": "amount", + "operation": ">", + "value": "150000" + }, + { + "field_name": "amount", + "operation": "<=", + "value": "300000" + } + ] +} \ No newline at end of file diff --git a/salesreportapp/readme/step2_Res_GetReportData.json b/salesreportapp/readme/step2_Res_GetReportData.json new file mode 100644 index 00000000..bea622a5 --- /dev/null +++ b/salesreportapp/readme/step2_Res_GetReportData.json @@ -0,0 +1,54 @@ +{ + "statusCode": 200, + "message": "Done", + "header": [ + { + "name": "city", + "type": "string" + }, + { + "name": "amount", + "type": "number" + }, + { + "name": "benefactor", + "type": "string" + } + ], + "data": [ + [ + { + "name": "city", + "type": "string", + "value": "tehran" + }, + { + "name": "amount", + "type": "number", + "value": "200000" + }, + { + "name": "benefactor", + "type": "string", + "value": "ali rezai" + } + ], + [ + { + "name": "city", + "type": "string", + "value": "tehran" + }, + { + "name": "amount", + "type": "number", + "value": "200000" + }, + { + "name": "benefactor", + "type": "string", + "value": "ali rezai" + } + ] + ] +} \ No newline at end of file diff --git a/salesreportapp/repository/Get.go b/salesreportapp/repository/Get.go new file mode 100644 index 00000000..4e0193bd --- /dev/null +++ b/salesreportapp/repository/Get.go @@ -0,0 +1,15 @@ +package salesreportrepository + +import ( + "time" + + "git.gocasts.ir/ebhomengo/niki/salesreportapp/entity" +) + +// GetSalesReportsWithTimeRange retrieves a list of sales reports within the specified time range. +func (s Repository) GetSalesReportsWithTimeRange(from, to time.Time) []entity.SalesReport { + + s.dbMysql.Conn(). + panic("Implement me!") + +} diff --git a/salesreportapp/repository/constructor.go b/salesreportapp/repository/constructor.go new file mode 100644 index 00000000..936c5f15 --- /dev/null +++ b/salesreportapp/repository/constructor.go @@ -0,0 +1,13 @@ +package salesreportrepository + +import "git.gocasts.ir/ebhomengo/niki/repository/mysql" + +// abstract on db +type Repository struct { + dbMysql *mysql.DB + dbPostgre *mysql.DB +} + +func New(connMy *mysql.DB, connPos *mysql.DB) Repository { + return Repository{} +} diff --git a/salesreportapp/service/constructor.go b/salesreportapp/service/constructor.go new file mode 100644 index 00000000..3f6865d2 --- /dev/null +++ b/salesreportapp/service/constructor.go @@ -0,0 +1,13 @@ +package salesreportservice + +import salesreportrepository "git.gocasts.ir/ebhomengo/niki/salesreportapp/repository" + +type Service struct { + Repository salesreportrepository.Repository +} + +func New(salesReportRepository salesreportrepository.Repository) Service { + return Service{ + Repository: salesReportRepository, + } +} diff --git a/salesreportapp/service/getReportData.go b/salesreportapp/service/getReportData.go new file mode 100644 index 00000000..74d8067a --- /dev/null +++ b/salesreportapp/service/getReportData.go @@ -0,0 +1,9 @@ +package salesreportservice + +import ( + "git.gocasts.ir/ebhomengo/niki/salesreportapp/entity" +) + +func (s Service) GetReportData(reportID []entity.QueryCondition) (entity.GetReportDataResponse, error) { + panic("Implement me!") +} diff --git a/salesreportapp/service/getReportFilters.go b/salesreportapp/service/getReportFilters.go new file mode 100644 index 00000000..c243488c --- /dev/null +++ b/salesreportapp/service/getReportFilters.go @@ -0,0 +1,9 @@ +package salesreportservice + +import ( + "git.gocasts.ir/ebhomengo/niki/salesreportapp/entity" +) + +func (s Service) GetReportFilters(reportID int64) ([]entity.FilterableFields, error) { + panic("Implement me!") +}