feat: добавил личные уведомления для пользователей
🚀 Create and publish a Docker image / Detect changes in backend and frontend (push) Successful in 9s
🚀 Create and publish a Docker image / Build & publish backend image (push) Successful in 26s
🚀 Create and publish a Docker image / Build & publish frontend image (push) Successful in 19s
🚀 Create and publish a Docker image / Update stack on Portainer (push) Successful in 8s
🚀 Create and publish a Docker image / Detect changes in backend and frontend (push) Successful in 9s
🚀 Create and publish a Docker image / Build & publish backend image (push) Successful in 26s
🚀 Create and publish a Docker image / Build & publish frontend image (push) Successful in 19s
🚀 Create and publish a Docker image / Update stack on Portainer (push) Successful in 8s
Реализовал хранение, получение и отметку прочитанными пользовательских уведомлений. Обновил фронтенд для отображения и управления уведомлениями в профиле студента.
This commit is contained in:
@@ -16,6 +16,7 @@ import type {
|
||||
UserAchievementDto,
|
||||
UserDto,
|
||||
UserQuery,
|
||||
UserNotificationDto,
|
||||
UserStatsDto,
|
||||
} from './types'
|
||||
|
||||
@@ -85,6 +86,14 @@ export const achievementsApi = {
|
||||
},
|
||||
}
|
||||
|
||||
export const notificationsApi = {
|
||||
async list() {
|
||||
const payload = await apiRequest<PagedResult<UserNotificationDto> | UserNotificationDto[]>('/notifications')
|
||||
return extractItems(payload)
|
||||
},
|
||||
markAllRead: () => apiRequest<void>('/notifications/read-all', { method: 'PATCH' }),
|
||||
}
|
||||
|
||||
export const reviewsApi = {
|
||||
create: (lectureId: string | number, rating: 'Like' | 'Neutral' | 'Dislike', text: string) =>
|
||||
apiRequest<ReviewDto>('/reviews', {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import type { Achievement, CoinTransaction, Lecture, Review, User, UserRole } from '@/types'
|
||||
import type { Achievement, CoinTransaction, Lecture, Notification, Review, User, UserRole } from '@/types'
|
||||
import type {
|
||||
AchievementDto,
|
||||
CoinTransactionDto,
|
||||
@@ -8,6 +8,7 @@ import type {
|
||||
UserDto,
|
||||
UserStatsDto,
|
||||
UserAchievementDto,
|
||||
UserNotificationDto,
|
||||
} from './types'
|
||||
|
||||
export function mapApiRole(role: string | undefined): UserRole {
|
||||
@@ -127,3 +128,14 @@ export function mapApiCoinTransaction(transaction: CoinTransactionDto): CoinTran
|
||||
type: transaction.amount >= 0 ? 'earned' : 'spent',
|
||||
}
|
||||
}
|
||||
|
||||
export function mapApiNotification(notification: UserNotificationDto): Notification {
|
||||
return {
|
||||
id: String(notification.id),
|
||||
type: notification.type,
|
||||
title: notification.title,
|
||||
body: notification.body,
|
||||
read: notification.isRead,
|
||||
createdAt: notification.createdAt,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -185,6 +185,15 @@ export interface CoinTransactionDto {
|
||||
createdAt: string
|
||||
}
|
||||
|
||||
export interface UserNotificationDto {
|
||||
id: number
|
||||
type: 'reminder' | 'schedule-change' | 'achievement' | 'coins' | 'recommendation'
|
||||
title: string
|
||||
body: string
|
||||
isRead: boolean
|
||||
createdAt: string
|
||||
}
|
||||
|
||||
export interface LectureQuery {
|
||||
DateFrom?: string
|
||||
DateTo?: string
|
||||
|
||||
Reference in New Issue
Block a user