feat: implement announcement management service with CRUD operations, attachment handling, and role-based access control for courses.
This commit is contained in:
parent
90d50dc84a
commit
baf389643b
3 changed files with 640 additions and 8 deletions
|
|
@ -1,16 +1,13 @@
|
|||
import { MultiLanguageText } from './index';
|
||||
|
||||
// Use MultiLanguageText from index.ts for consistency
|
||||
export type MultiLangText = MultiLanguageText;
|
||||
|
||||
export interface Announcement {
|
||||
id: number;
|
||||
title: MultiLangText;
|
||||
content: MultiLangText;
|
||||
title: MultiLanguageText;
|
||||
content: MultiLanguageText;
|
||||
status: string;
|
||||
is_pinned: boolean;
|
||||
created_at: Date;
|
||||
updated_at: Date;
|
||||
updated_at: Date | null;
|
||||
attachments: AnnouncementAttachment[];
|
||||
}
|
||||
|
||||
|
|
@ -42,15 +39,83 @@ export interface ListAnnouncementInput{
|
|||
export interface CreateAnnouncementInput{
|
||||
token: string;
|
||||
course_id: number;
|
||||
title: MultiLangText;
|
||||
content: MultiLangText;
|
||||
title: MultiLanguageText;
|
||||
content: MultiLanguageText;
|
||||
status: string;
|
||||
is_pinned: boolean;
|
||||
attachments?: AnnouncementAttachment[];
|
||||
}
|
||||
|
||||
export interface UploadAnnouncementAttachmentInput{
|
||||
token: string;
|
||||
course_id: number;
|
||||
announcement_id: number;
|
||||
file: File;
|
||||
}
|
||||
|
||||
export interface UploadAnnouncementAttachmentResponse{
|
||||
code: number;
|
||||
message: string;
|
||||
data: AnnouncementAttachment;
|
||||
}
|
||||
|
||||
export interface DeleteAnnouncementAttachmentInput{
|
||||
token: string;
|
||||
course_id: number;
|
||||
announcement_id: number;
|
||||
attachment_id: number;
|
||||
}
|
||||
|
||||
export interface DeleteAnnouncementAttachmentResponse{
|
||||
code: number;
|
||||
message: string;
|
||||
}
|
||||
|
||||
export interface CreateAnnouncementResponse{
|
||||
code: number;
|
||||
message: string;
|
||||
data: Announcement;
|
||||
}
|
||||
|
||||
export interface UpdateAnnouncementInput{
|
||||
token: string;
|
||||
course_id: number;
|
||||
announcement_id: number;
|
||||
title: MultiLanguageText;
|
||||
content: MultiLanguageText;
|
||||
status: string;
|
||||
is_pinned: boolean;
|
||||
attachments?: AnnouncementAttachment[];
|
||||
}
|
||||
|
||||
export interface UpdateAnnouncementResponse{
|
||||
code: number;
|
||||
message: string;
|
||||
data: Announcement;
|
||||
}
|
||||
|
||||
export interface DeleteAnnouncementInput{
|
||||
token: string;
|
||||
course_id: number;
|
||||
announcement_id: number;
|
||||
}
|
||||
|
||||
export interface DeleteAnnouncementResponse{
|
||||
code: number;
|
||||
message: string;
|
||||
}
|
||||
|
||||
// Body types for TSOA controller
|
||||
export interface CreateAnnouncementBody {
|
||||
title: MultiLanguageText;
|
||||
content: MultiLanguageText;
|
||||
status: string;
|
||||
is_pinned: boolean;
|
||||
}
|
||||
|
||||
export interface UpdateAnnouncementBody {
|
||||
title: MultiLanguageText;
|
||||
content: MultiLanguageText;
|
||||
status: string;
|
||||
is_pinned: boolean;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue