---
# System prepended metadata

title: 공지사항

---

카테고리
- 관리자
    - 카테고리 조회
        ``` ts
        {
            카테고리id
            카테고리
        }
        ```
[ 영진 ]

req ( params )
```ts=
{
    type : 'NOTICE' | 'FAQ' | 'INQUIRY'
}
```

res
```ts=
{
    categories: Array<{
        id: number;
        title: string;
    }>
}
```
   
---
        
- 카테고리 생성
    ``` ts
    {
        카테고리
    }
    ```

[ 영진 ] 

req ( body ) 
```ts=
{
    type : '고객센터' | 'FAQ' | '1:1문의'
    title: string;
}
```

---

- 카테고리 수정
    ``` ts
    {
        카테고리id
        카테고리
    }
    ```

[ 영진 ]

req ( body ) 
```ts=
{
    type : '고객센터' | 'FAQ' | '1:1문의'
    id: number;
    title:string;
}
```

---

- 카테고리 삭제
    ``` ts
    {
        카테고리id
    }
    ```

[ 영진 ]


req ( body ) 
```ts=
{
    type : '고객센터' | 'FAQ' | '1:1문의'
    id: number;
}
```

공지사항, FAQ, 1:1문의 마다 카테고리 분리해서 서버 db에서 관리해야할듯


---

공지사항
- 사용자
    - 공지사항 조회(pagination, query search)
        ``` ts
        {
            공지글id
            필독 여부
            조회수
            노출시간
            카테고리
            댓글: {댓글,댓글id,댓글 시간}[]
        }
        ```
        
[ 영진 ]

=> 전체조회와 상세조회 구분해야할듯 

* 전체 조회

req ( params )
```ts=
searchType : 'title' | 'content' | 'titleContent';
search : string;
category:string;
page:number;
size:number;
```

res 
```ts=
{
    total:number;
    postList:Array<{
        공지글id:number;
        index:number | null; ( null => 필독 , number => 게시글 순서 ) => 공지글id와 구분 짓는 이유는, 공지글 제거가 될때 index는 순서가 순차적이어야하나, 공지글 id는 고정이라 생각했음
        category:string;
        title:string;
        createdAt:Date;
        viewCount:number;
    }>
}
```

* 상세 조회

req ( params )
```ts=
{
    공지글id:number;
}
```

res
```ts=
{
    공지글id:number;
    category:string;
    title:string;
    createdAt:Date;
    viewCount:number;
    author:'작성자';
    profileImg:string;
    content:string; ( html )
}
```

* 공지사항 댓글 조회 


req ( params )
```ts=
{
    공지글id:number;
    page:number;
    size:number;
}
```


res
```ts=
{
    total:number;
    comments:Array<{
        id:number;
        author:string;
        content:string; ( html일 필요가 있을지?? )
    }>
}
```

* 공지사항 이전글 다음글 조회 
( 공지사항 상세와 합쳐도 상관 없음 => query join delay생기면 쪼개도 될듯 )

req ( params )
```ts=
{
    공지글id:number;
}
```

res 
```ts=
{
    prev:{
        공지글id:number;
        category:string;
        title:string;
    };
    next:{
        공지글id:number;
        category:string;
        title:string;
    };
}
```

* 공지사항 조회수 카운트 PATCH

req ( body )
```ts=
{
    공지글id:number;
}
```

---

- 관리자
    - 공지사항 조회(pagination, query search)
        ``` ts
        {
            공지글id
            게시자
            필독 여부
            조회수
            노출시간
            카테고리
            댓글: {댓글,댓글id,댓글 시간}[]
        }
        ```


[ 영진 ] 

사용자와 동일하게 써도 될듯?

---

- 공지사항 생성
  - 기능
    - 필독 여부
    - 노출 시간
    ``` ts
    {
        게시자
        필독 여부
        조회수
        노출시간
        카테고리
        공지사항 내용 (html)
    }
    ```
    

[ 영진 ]

req ( body )
```ts=
    Essential:boolean;
    showTime:Date ( UTC ); ( 이게 createdAt으론 노출되어야 하는지? )
    category:string;
    title:string;
    viewCount: number; ( 초기 조작.. )
    author: '관리자' << 서버에서 알아서 넣어줘도 될듯
    content: string; ( html )
```


---
    
    
- 공지사항 수정
    ``` ts
    {
        게시자
        필독 여부
        조회수
        노출시간
        카테고리
        공지사항 내용 (html)
    }
    ```

[ 영진 ]

req ( body )
```ts=
    Essential:boolean;
    showTime:Date ( UTC ); ( 이게 createdAt으론 노출되어야 하는지? )
    category:string;    
    title:string;
    viewCount: number; ( 초기 조작.. )
    author: '관리자' << 서버에서 알아서 넣어줘도 될듯
    content: string; ( html )
```

---

- 공지사항 삭제
    ``` ts
    {
        공지글id
    }
    ```

공지사항 댓글 (공지사항에서 조회 가능)
- 관리자
    - 공지사항 댓글 생성
        ``` ts
        {
            댓글 내용 (html)
            댓글 시간
        }
        ```

[ 영진 ]


req ( body )

```ts=
{
    게시글id:number;
    comment: string ( html )
    createdAt: 서버에서 알아서 ( 근데 필요할련지..? 디자인에서는 없어서 )
}
```

---

- 공지사항 댓글 수정
    ``` ts
    {
        댓글 내용 (html)
    }
    ```
   
[ 영진 ]


req ( body )

```ts=
{
    게시글id:number;
    comment: string ( html )
    updatedAt: 서버에서 알아서 ( 근데 필요할련지..? 디자인에서는 없어서 )
}
```
    
---

- 공지사항 댓글 삭제
    ``` ts
    {
        공지글id
        댓글id
    }
    ```

FAQ
- 사용자
    - FAQ 조회 (pagination, query search)
        ``` ts
        {
            FAQid
            카테고리
            질문
            답변
        }
        ```
   
[ 영진 ]

* FAQ 전체 조회 

req ( params )
```ts=
searchType : 'title' | 'content' | 'titleContent';
search : string;
category: string;
page:number;
size:number;
```

res 
```ts=
{
    total:number;
    postList:Array<{
        id:number;
        category: string;
        question:string;
        answer:string;
    }>
}
```


---
        
- 관리자
    - FAQ 생성
       - 기능
       - 카테고리에 따른 질문과 답변 추가
        ``` ts
        {
            카테고리
            질문
            답변
        }
        ```
    - FAQ 조회 (pagination, query search)
        ``` ts
        {
            FAQid
            카테고리
            질문
            답변
        }
        ```
        [ 영진 ] => 사용자랑 동일하게 사용해도 될듯 
    - FAQ 수정
        ``` ts
        {
            FAQid
            카테고리
            질문
            답변
        }
        ```
    - FAQ 삭제
        ``` ts
        {
            FAQid
        }
        ```

1:1 문의
- 사용자
  - 1:1문의 조회 (pagination)
    ``` ts
    {
        답변여부
        1:1문의id
        문의 내용
        답변: {답변,답변id,답변 시간}[]
    }
    ```

[ 영진 ]

* 1:1 전체조회 

req ( params )
```ts=
category: string;
page:number;
size:number;
```

res 
```ts=
{
    total:number;
    postList:Array<{
        id:number;
        category: string;
        title:string;
        answer:string | null; => 또는 answerFlag만 있어도 될듯 ( content는 전체 조회에 필요 없어서 )
        createdAt:Date;
    }>
}
```

* 1:1 상세조회

req ( params )
```ts=
    id:number;
```

res 
```ts=
    id:number;
    category:string;
    title:string;
    content:string;
    createdAt:string;
    answer:string | null;
    author:string << 나인데 필요한가?
    profileImg:string << 나인데 필요한가?
```

---

  - 1:1문의 생성
    ``` ts
    {
        문의 내용
    }
    ```

[ 영진 ]

req ( body ) 

```ts=
{
    content:string; ( 개인정보인데 암호화 해야하지 않을까? )
    category:string;
}
```
   
   
---
    
- 관리자
  - 1:1문의 조회 (pagination, query search)
    ``` ts
    {
        답변여부
        1:1문의id
        문의 내용
        답변: {답변,답변id,답변 시간}[] // 답변은 1개로 제한됩니다.
    }
    ```

[ 영진 ]

사용자 조회와 동일하게 해도 될듯??

---

  - 1:1문의 답변 생성
    ``` ts
    {
        1:1문의id
        답변
    }
    ```
  - 1:1문의 답변 수정
    ``` ts
    {
        답변id
        답변
    }
    ```
  - 1:1문의 답변 삭제
    ``` ts
    {
        답변id
    }
    ```

알림
- 사용자
    - 알림 조회
      - 타입
        - 공지사항, 1:1 문의 댓글, 지원 승인/반려
    ``` ts
    // 공지사항
    {
        공지사항id
        필독여부
        노출시간
    }
    // 1:1 문의 댓글
    {
        1:1문의id
        댓글id
        생성시간
    }
    // 지원 승인/반려
    {
        승인 여부
        생성시간
    }
    ```
   
[ 영진 ]

* 알림 전체 조회  

res
```ts=
{ 
    total:number;
    notifications: Array<{
        id: number;
        title: string;
        content: string;
        isRead: boolean;
        isImportant: boolean;
        createdAt: Date;  
        type: "ADMISSION" | "COMMENT" | "INQUIRY"
        serviceId: string;
    }>
}
```
=> 중요알림도 있다던데
=> 알람 리스트 페이지 나오면 데이터 필드 변경될 수도,
=> 5개까지만 헤더에서 노출하고 그 이상이라면 `더보기 활성화` => total로 체크하고,
=> notifications는 5개까지만 줘도 될듯
=> type + serviceId(이동할 특정 URI)를 기반하여 특정 URI 이동

* 알림 상세 조회 

req ( body )

```ts=
{
    id:number;
}
```

res 
```ts=
{
    canMove:boolean;
    href:string; ( go to url )
}
```
---