feat: первое подключение фронтенда
🚀 Create and publish a Docker image / Detect changes in backend and frontend (push) Successful in 8s
🚀 Create and publish a Docker image / Build & publish backend image (push) Successful in 54s
🚀 Create and publish a Docker image / Build & publish frontend image (push) Successful in 27s
🚀 Create and publish a Docker image / Update stack on Portainer (push) Successful in 6s
🚀 Create and publish a Docker image / Detect changes in backend and frontend (push) Successful in 8s
🚀 Create and publish a Docker image / Build & publish backend image (push) Successful in 54s
🚀 Create and publish a Docker image / Build & publish frontend image (push) Successful in 27s
🚀 Create and publish a Docker image / Update stack on Portainer (push) Successful in 6s
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
import { apiRequest, extractItems } from './client'
|
||||
import type {
|
||||
AchievementDto,
|
||||
AuthResponse,
|
||||
CoinTransactionDto,
|
||||
LectureDto,
|
||||
LectureQuery,
|
||||
PagedResult,
|
||||
ReviewDto,
|
||||
UserAchievementDto,
|
||||
UserDto,
|
||||
UserStatsDto,
|
||||
} from './types'
|
||||
|
||||
export const authApi = {
|
||||
loginMicrosoft: (authorizationCode: string, redirectUri?: string) =>
|
||||
apiRequest<AuthResponse>('/auth/login/microsoft', {
|
||||
method: 'POST',
|
||||
body: JSON.stringify({ authorizationCode, redirectUri }),
|
||||
}),
|
||||
refresh: () => apiRequest<AuthResponse>('/auth/refresh', { method: 'POST' }),
|
||||
logout: () => apiRequest<void>('/auth/logout', { method: 'POST' }),
|
||||
me: () => apiRequest<UserDto>('/auth/me'),
|
||||
}
|
||||
|
||||
export const lecturesApi = {
|
||||
async list(query: LectureQuery = {}) {
|
||||
const payload = await apiRequest<PagedResult<LectureDto> | LectureDto[]>('/lectures', {
|
||||
query: query as Record<string, unknown>,
|
||||
})
|
||||
return extractItems(payload)
|
||||
},
|
||||
get: (id: string | number) => apiRequest<LectureDto>(`/lectures/${id}`),
|
||||
enroll: (id: string | number) => apiRequest<void>(`/lectures/${id}/enroll`, { method: 'POST' }),
|
||||
unenroll: (id: string | number) => apiRequest<void>(`/lectures/${id}/enroll`, { method: 'DELETE' }),
|
||||
async reviews(id: string | number) {
|
||||
const payload = await apiRequest<PagedResult<ReviewDto> | ReviewDto[]>(`/lectures/${id}/reviews`)
|
||||
return extractItems(payload)
|
||||
},
|
||||
}
|
||||
|
||||
export const usersApi = {
|
||||
get: (id: string | number) => apiRequest<UserDto>(`/users/${id}`),
|
||||
stats: (id: string | number) => apiRequest<UserStatsDto>(`/users/${id}/stats`),
|
||||
async enrollments(id: string | number) {
|
||||
const payload = await apiRequest<PagedResult<LectureDto> | LectureDto[] | undefined>(`/users/${id}/enrollments`)
|
||||
return extractItems(payload)
|
||||
},
|
||||
async achievements(id: string | number) {
|
||||
const payload = await apiRequest<PagedResult<UserAchievementDto> | UserAchievementDto[] | AchievementDto[]>(
|
||||
`/users/${id}/achievements`,
|
||||
)
|
||||
if (Array.isArray(payload)) return payload
|
||||
return payload.items ?? []
|
||||
},
|
||||
async transactions(id: string | number) {
|
||||
const payload = await apiRequest<PagedResult<CoinTransactionDto> | CoinTransactionDto[]>(
|
||||
`/users/${id}/transactions`,
|
||||
)
|
||||
return extractItems(payload)
|
||||
},
|
||||
}
|
||||
|
||||
export const reviewsApi = {
|
||||
create: (lectureId: string | number, rating: 'Like' | 'Neutral' | 'Dislike', text: string) =>
|
||||
apiRequest<ReviewDto>('/reviews', {
|
||||
method: 'POST',
|
||||
body: JSON.stringify({ lectureId: Number(lectureId), rating, text }),
|
||||
}),
|
||||
}
|
||||
Reference in New Issue
Block a user