# API Contract for BackOffice Role ADMIN
## Common Type
### Class type
```typescript=
enum ClassType {
VIDEO = 'video',
PHYSICAL = 'physical',
ONLINE = 'online'
}
```
### Popularity
```typescript=
enum Popularity {
NEWEST = 'newest',
MOST_POPULAR = 'most_popular',
HIGH_RATES = 'high_rates',
TRENDING = 'trending'
}
```
## Dashboard
### Get First Dashboard
Menampilkan Dashboard yang terbaru atau yang difiturkan
**Response type**
```typescript=
interface Dashboard {
itemSold:number
netsales:number
order:number
charsDasboard:{
name:string
categories:['feb','march'] //month or anything
data:[10,11] // data in each month
}
general:{
all:number
publish:number
free:number
paid:number
pending:number
}
}
```
Respon:
* jika kosong = send status code `204`
* jika terisi = return `Dashboard`
* possible error = `500`
### Get tab Users
Menampilkan data Tab Users pada Dashboard yang terbaru atau yang difiturkan
**Response type**
```typescript=
interface DashbaordUsers{
all:{
total:number
chart:[
{
name:string, //example active, not active, student, or business
categories:['feb','march'], //month or anything
data:[10,11]
}
// add more if there are more data
]
}
instructure:{
total:number
chart:[
{
name:string, //example active, not active, student, or business
categories:['feb','march'], //month or anything
data:[10,11]
}
// add more if there are more data
]
}
student:{
total:number
chart:[
{
name:string, //example active, not active, student, or business
categories:['feb','march'], //month or anything
data:[10,11]
}
// add more if there are more data
]
}
business:{
total:number
chart:[
{
name:string, //example active, not active, student, or business
categories:['feb','march'], //month or anything
data:[10,11]
}
// add more if there are more data
]
}
}
```
Respon:
* jika kosong = send status code `204`
* jika terisi = return `DashbaordUsers`
* possible error = `500`
### get Tab Classes
Menampilkan data Tab Classes pada Dashboard yang terbaru atau yang difiturkan
**Response type**
```typescript=
interface DashboardClasses{
all:number
published:number
active:number
failedClass:number
free:number
paid:number
pending:number
}
```
Respon:
* jika kosong = send status code `204`
* jika terisi = return `DashboardClasses`
* possible error = `500`
### get Tab Order
Menampilkan data Tab Order pada Dashboard yang terbaru atau yang difiturkan
**Response type**
```typescript=
interface DashboardOrder{
all:{
total:number //total of data in chart
cost:number
isUp:boolean //true if its up false if itsDown
chart:{
name:string
categories:['feb','march'] // its month or anything
data:[10,11]
}
}
instructure:{
total:number //total of data in chart
cost:number
isUp:boolean //true if its up false if itsDown
chart:{
name:string
categories:['feb','march'] // its month or anything
data:[10,11]
}
}
student:{
total:number //total of data in chart
cost:number
isUp:boolean //true if its up false if itsDown
chart:{
name:string
categories:['feb','march'] // its month or anything
data:[10,11]
}
}
business:{
total:number //total of data in chart
cost:number
isUp:boolean //true if its up false if itsDown
chart:{
name:string
categories:['feb','march'] // its month or anything
data:[10,11]
}
}
}
```
Respon:
* jika kosong = send status code `204`
* jika terisi = return `DashboardOrder`
* possible error = `500`
## Generic Data for Class
### Class List
```typescript=
interface ClassList {
id:number
title:string
classType:string
totalStudents:string
price:string
categories:string[]
status:string
}
```
### Detail Class
#### Tab Overview
```typescript=
interface Overview {
instructor:string
coInstructure:string[]
classOverview:{
title:string
mainCategory:string
secondaryCategory:string[]
tags:string[]
classType:string
classDescription:string
}
extraInformation:{
numberOfSession:string[]
durationOfEachSession:string[]
requirements:string[]
targetAudiance:[
{
title:string,
content:string
}
]
}
}
```
#### Tab Settings
```typescript=
interface Settings {
regular:{
minStudent:number,
externalLink:string,
language:string,
},
schedule:{
zoomLink:string
scheduleLink:string
time:date|string
// if type class physical class
mapsLink:string
}
}
```
#### Tab Price
```typescript=
interface Price {
title:string
price:string
description:string
}
```
#### Tab Lesson
#### Lesson
digunakan untuk input data
```typescript=
interface LessonList {
lessonTitle:string
description:string
file:any
lessonContent:string
videoLink:string
}
```
##### Lesson List
digunakan saat ngeget lesson list
```typescript=
interface LessonList {
id:number
lessonTitle:string
description:string
file:string
}
```
#### Tab Thumbnail
```typescript=
interface Thumbnail {
thumbnailImg:any
classGalery:[
{
galeryImg:any
}
]
youtubeLink:any
}
```
#### Tab Certificate
##### Certificate
digunakan saat input certificate
```typescript=
interface Certificate {
title:string
backgroundCertificate:any
couseName:string
studentName:string
startDate:string
startEnd:string
currentTime:date|string
}
```
##### Certificate List
digunakan pada saat get list certificate
```typescript=
interface CertificateList {
id
studentName
status
validFrom
validTo
}
```
#### Tab Students
##### List Student
digunakan ngeget list student
```typescript=
interface List Students {
id:number
name:string
email:string
progress:string
status:string
}
```
## Generic Data for Blog
### Blog
```typescript=
interface Blog {
title:string
blogCategories:string
tags:string[]
blogContent:string
blogThumbnail:string
}
```
### Blog List
```typescript=
interface ListBlog {
id:string
image:string
title:string
author:stirng
category:string
tags:string[]
date:date|string
}
```
### Blog Published
```typescript=
interface ListBlogPublished extends ListBlog
```
### Blog Draft
```typescript=
interface ListBlogDraft extends ListBlog
```
## Generic Data Review and Ratings
### Review and Ratings List
``` typescript=
interface ReviewAndRatingList {
id:number
author:string
className:string
instructor:string
ratings:number // 1 - 5
date:date|string
}
```
### Reply Review And Ratings
``` typescript=
interface ReplyReviewAndRating {
className:string
instructor:string
author:string
role:string
ratings:number // 1-5
date:date|string
comment:[
{
from:string,
to:string,
messageL:string
}
]
}
```
## Generic Data for Our Team
### Our Team
``` typescript=
interface OurTeam {
name:string
position:string
description:string
contactInformation {
linkedInURL:string
email:string
}
photo:any
}
```
### Our Team List
```typescript=
interface OurTeamList {
id:number
name:string
position:string
description:string
}
```
## Users
### Users
```typescript=
interface Users {
username:string
email:string
firstName:string
lastName:string
website:string
role:string
password:string
profilePicture:any
}
```
### Edit Users
```typescript=
interface EditUsers {
username:string
email:string
firstName:string
lastName:string
website:string
role:string
password:string
profilePicture:any
praventPassword:boolean
status:string
}
```
### List Users
```typescript=
interface ListUsers {
id:number
username:string
name:string
role:string
amount:string
status:string
email:string
createdAccount:date|string
lastActive:date|string
}
```
## Generic Data for Coupon
### Coupon add or edit
```typescript=
interdace Coupon {
addCoupon:{
couponName:string
description
tags:string[]
}
couponDate:{
discountType:string
couponAmount:string
counponExpiredDate:date|string
minimumSpend:number
maximumSpend:number
individualUseOnly:boolen
exculudeSaleItem:boolean
course:string
excludeCourse:string
category:string
excludeCategory:string
allowedEmail:string
limitUser:number
limitCoupon:number
}
}
```
### List Coupon
```typescript=
id:number
code:string
couponType:string
couponAmount:string
usageOrLimit:number|string
description:string
```
## Generic Data for Instructure
### Detail Instructure
``` typescript=
interface DetailInstructure{
fullName:string
picture:string
name:string
mail:string
role:string
country:string
phone:string
web:string
status:string
linkedin:string
facebook:string
instagram:string
youtube:string
experiance:{
relevantExperiance:string
reasonToBecomeInstructure:string
trainingExperiance:string
relevantIndustrieExperiance:string
}
expertise:{
areasExpertise:string
jobTitle:string
purposedClassOverview:string
}
}
```
### List Instructure
```typescript=
interface ListInstructure{
id:number
picture:string
name:string
email:string
status:string
}
```
## Public Landing Page
### Get latest (featured) course
Menampilkan course yang terbaru atau yang difiturkan
**Response type**
```typescript=
interface LatestCourse extends CourseCard {
minimum_student: number
registered_student: number
}
```
Respon:
* jika kosong = send status code `204`
* jika terisi = return `LatestCourse`
* possible error = `500`
### Get trending course
Menampilkan course yang sedang trending (populer) belakangan ini
**Response type**: `CourseCard`
Respon:
* jika kosong = send status code `204` atau return `[]`
* jika terisi = return `CourseCard[]`
* possible error = `500`
### Get course by type
Menampilkan course berdasarkan `ClassType`
**Response type**: `CourseCard`
Respon:
* jika kosong = send status code `204` atau return `[]`
* jika terisi = return `CourseCard[]`
* possible error = `500`