Skip to content

Commit

Permalink
Merge pull request #11 from RECYTHNG/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
haiser1 authored Jun 16, 2024
2 parents 6986abc + 4899e2f commit 6d37e1b
Show file tree
Hide file tree
Showing 10 changed files with 832 additions and 3 deletions.
203 changes: 200 additions & 3 deletions docs/swagger.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ servers:
tags:
- name: homepage
description: Endpoint for user get homepage
- name: dashboard
description: Endpoint for admin dashboard
- name: authentication
description: Endpoint for user register/login
- name: user
Expand Down Expand Up @@ -3921,6 +3923,15 @@ paths:
operationId: getAllDataVideo
security:
- Bearer: []
parameters:
- name: limit
in: query
required: false
schema:
type: integer
default: 10
description: Number of data
example: 10
responses:
'200':
description: Success
Expand Down Expand Up @@ -5096,6 +5107,22 @@ paths:
name:
type: string
example: tips

/dashboards:
get:
tags:
- dashboard
summary: Get dashboard data
description: Endpoint admin to get data dashboard
operationId: getDashboard
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/Dashboard'

components:
schemas:
User:
Expand Down Expand Up @@ -5505,8 +5532,178 @@ components:
format: date
example: "2020-01-01"




Dashboard:
type: object
properties:
code:
type: integer
example: 200
message:
type: string
example: success
data:
type: object
properties:
user:
type: object
properties:
total_user:
type: integer
example: 100
addition_user_since_yesterday:
type: integer
example: 10
report:
type: object
properties:
total_report:
type: integer
example: 100
addition_report_since_yesterday:
type: integer
example: 10
challenge:
type: object
properties:
total_challenge:
type: integer
example: 100
addition_challenge_since_last_week:
type: integer
example: 10
content:
type: object
properties:
total_content:
type: integer
example: 100
addition_content_today:
type: integer
example: 10
user_achievement:
type: object
properties:
total_user:
type: integer
example: 100
classic:
type: integer
example: 10
silver:
type: integer
example: 10
gold:
type: integer
example: 10
platinum:
type: integer
example: 10
data_user_by_address:
type: array
items:
type: object
properties:
city:
type: string
example: "Jakarta"
total_user:
type: integer
example: 100
data_user_by_gender:
type: array
items:
type: object
properties:
gender:
type: string
example: laki-laki
total_user:
type: integer
example: 100
percentage:
type: number
example: 50
total_report_littering:
type: integer
example: 100
total_report_rubbish:
type: integer
example: 100
data_report_by_waste_rubbish:
type: array
items:
type: object
properties:
report_type:
type: string
example: rubbish
waste_type:
type: string
example: plastik
total_reports:
type: integer
example: 40
percentage:
type: number
example: 50
data_report_by_waste_littering:
type: array
items:
type: object
properties:
report_type:
type: string
example: littering
waste_type:
type: string
example: organic
total_reports:
type: integer
example: 40
percentage:
type: number
example: 50
data_report_statistic:
type: object
properties:
report_littering:
type: array
items:
type: object
properties:
month:
type: string
example: Januari
daily_statistic:
type: array
items:
type: object
properties:
day:
type: integer
example: 1
total_reports:
type: integer
example: 10
report_rubbish:
type: array
items:
type: object
properties:
month:
type: string
example: Januari
daily_statistic:
type: array
items:
type: object
properties:
day:
type: integer
example: 1
total_reports:
type: integer
example: 10



78 changes: 78 additions & 0 deletions internal/dashboard/dto/dashboar_response.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package dto

type DashboardResponse struct {
User TotalUser `json:"user"`
Report TotalReport `json:"report"`
Challenge TotalChallenge `json:"challenge"`
Content TotalContent `json:"content"`
UserAchievement UserAchievement `json:"user_achievement"`
DataUserByAddress []DataUserByAddress `json:"data_user_by_address"`
DataUserByGender []DataUserByGender `json:"data_user_by_gender"`
TotalLittering int `json:"total_report_littering"`
TotalRubbish int `json:"total_report_rubbish"`
DataReportByWasteTypeRubbish []DataReportByWasteType `json:"data_report_by_waste_rubbish"`
DataReportByWasteTypeLittering []DataReportByWasteType `json:"data_report_by_waste_littering"`
DataReportStatistic DataReportStatistic `json:"data_report_statistic"`
}

type TotalUser struct {
TotalUser int `json:"total_user"`
AdditionUserSinceYesterday int `json:"addition_user_since_yesterday"`
}

type UserAchievement struct {
TotalUser int `json:"total_user"`
Classic int `json:"classic"`
Silver int `json:"silver"`
Gold int `json:"gold"`
Platinum int `json:"platinum"`
}

type TotalReport struct {
TotalReport int `json:"total_report"`
AdditionReportSinceYesterday int `json:"addition_report_since_yesterday"`
}

type TotalChallenge struct {
TotalChallenge int `json:"total_challenge"`
AdditionChallengeSinceLastWeek int `json:"addition_challenge_since_last_week"`
}

type TotalContent struct {
TotalContent int `json:"total_content"`
AdditionContentToday int `json:"addition_content_today"`
}

type DailyReportStats struct {
Day int64 `json:"day"`
TotalReports int64 `json:"total_reports"`
}

type MonthlyReportStats struct {
Month string `json:"month"`
DailyStats []DailyReportStats `json:"daily_statistic"`
TotalReports int64 `json:"total_reports"`
}

type DataReportStatistic struct {
ReportLittering []MonthlyReportStats `json:"report_littering"`
ReportRubbish []MonthlyReportStats `json:"report_rubbish"`
}

type DataUserByAddress struct {
City string `json:"city"`
TotalUser int `json:"total_user"`
}

type DataUserByGender struct {
Gender string `json:"gender"`
TotalUser int64 `json:"total_user"`
Percentage float64 `json:"percentage"`
}

type DataReportByWasteType struct {
ReportType string `json:"report_type"`
WasteType string `json:"waste_type"`
TotalReports int64 `json:"total_reports"`
Percentage float64 `json:"percentage"`
}
7 changes: 7 additions & 0 deletions internal/dashboard/handler/dashboard_handler.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package handler

import "github.com/labstack/echo/v4"

type DashboardHandler interface {
GetDashboardHandler(c echo.Context) error
}
27 changes: 27 additions & 0 deletions internal/dashboard/handler/dashboard_handler_impl.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package handler

import (
"net/http"

"github.com/labstack/echo/v4"
"github.com/sawalreverr/recything/internal/dashboard/usecase"
"github.com/sawalreverr/recything/internal/helper"
)

type DashboardHandlerImpl struct {
DashboardUsecase usecase.DashboardUsecase
}

func NewDashboardHandler(dashboardUsecase usecase.DashboardUsecase) DashboardHandler {
return &DashboardHandlerImpl{DashboardUsecase: dashboardUsecase}
}

func (h *DashboardHandlerImpl) GetDashboardHandler(c echo.Context) error {
dashboard, err := h.DashboardUsecase.GetDashboardUsecase()
if err != nil {
return helper.ErrorHandler(c, http.StatusInternalServerError, "internal server error")
}
responseData := helper.ResponseData(http.StatusOK, "success", dashboard)
return c.JSON(http.StatusOK, responseData)

}
21 changes: 21 additions & 0 deletions internal/dashboard/repository/dashboard_repository.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package repository

import "github.com/sawalreverr/recything/internal/dashboard/dto"

type DashboardRepository interface {
GetTotalUser() (int, int, error)
GetTotalReport() (int, int, error)
GetTotalChallenge() (int, int, error)
GetTotalVideo() (int, int, error)
GetTotalArticle() (int, int, error)
GetUserClassic() (int, error)
GetUserSilver() (int, error)
GetUserGold() (int, error)
GetUserPlatinum() (int, error)
GetReportLittering() (int, error)
GetReportRubbish() (int, error)
GetMonthlyReport(year int, reportType string) ([]dto.MonthlyReportStats, error)
GetDataUserByAddress() ([]dto.DataUserByAddress, error)
GetUserByGender() ([]dto.DataUserByGender, error)
GetDataReportByWasteType(reportType string, wasteTypes []string) ([]dto.DataReportByWasteType, error)
}
Loading

0 comments on commit 6d37e1b

Please sign in to comment.