Files
# 기존 타입
type Files {
id: ID!
# 생략
createdAt: DateTime # 생성 일시 - 추가
playTime: Float # 재생 시간 - 추가
}
input PreSignedUrlsInput {
inputs: [FileInput!]!
businessDomain: BusinessDomain! # 아직 네이밍 및 타입명은 픽스 아님.
}
type PreSignedUrlForFile {
fileName: String!
fileKey: ID! # ULID BE에서 생성합니다.
url: String! # PresigendURL
}
type PreSignedUrlsPayload {
urls: [PreSignedUrlForFile!]!
}
input FileInput {
contentType: String! # MIME
fileName: ID!
}
type Query {
preSignedUrls(input: PreSignedUrlsInput!): PreSignedUrlsPayload!
}
GraphQL
복사
Student Record
enum CounsellingTarget {
STUDENT # 학생
PARENT # 학부모
}
enum StudentRecordType {
COUNSELING
}
interface StudentRecord {
id: ID!
type: StudentRecordType!
author: User! # 작성자
createdAt: DateTime! # 생성 일시
}
# 판매 상담 기록
type SalesCounselingRecord implements StudentRecord {
id: ID!
type: StudentRecordType!
counsellingTarget: CounsellingTarget! # 상담 대상
attachedFiles: [Files!]! # 첨부 파일 목록
content: String # | Prosemirror # 상담 내용
}
type PaginatedSalesCounsellings {
items: [SalesCounselling!]! # 상담 기록 목록
totalCount: Int! # 전체 상담 기록 수
limit: Int! # 페이지당 항목 수
offset: Int! # 시작 위치
}
input AttachedInfo {
fileInfos: [FileInfo!]!
}
input FileInfo {
fileKey: ID!
fileName: String!
fileCreateAt: DateTime
contentType: String!
duration: Duration! # Duration 없는 MIME type은 PT0S 로 보내주세요.
}
enum BusinessDomain {
COUNSELING
}
# Mutation TypestudentRecord
type Mutation {
# 상담 기록 추가
createStudentRecord(
input: CreateStudentRecordInput!
): CreateStudentRecordPayload!
# 상담 기록 수정
updateStudentRecord(
id: ID!
input: UpdateStudentRecordInput!
): Counselling!
# 상담 기록 삭제
deleteCounselling(id: ID!): Boolean!
}
input CreateStudentRecordInput {
type: StudentRecordType!
salesCounselingInput: SalesCounsellingInput
# counselingInput: CounSelingInput
}
input SalesCounsellingInput {
purchaseId: ID!
counsellingTarget: CounsellingTarget! # 상담 대상
content: String | ProseMirror # 상담 내용: 아직 타입은 미정
attachedInfo: AttachedInfo!
}
type CreateStudentRecordPayload {
studentRecord: StudentRecord!
}
input UpdateStudentRecordInput {
type: StudentRecordType!
salesCounselingInput: SalesCounsellingInput
}
GraphQL
복사
Purchase
type Purchase {
id: ID!
buyerName: String! # 구매자 이름
studentName: String! # 학생 이름
impUid: String! # 아임포트 결제 번호
courseStartDate: DateTime! # 강의 시작일
buyerMobile: String! # 구매자 전화번호
grade: String! # 학년
paidAt: DateTime! # 결제 일시
studentMobile: String! # 전화번호
status: PurchaseStatus! # 결제 상태
paymentMethod: String! # 결제 수단
price: Int! # 가격
sellers: [User!]! # 판매자
salesCounsellingRecords(
limit: Int = 10
offset: Int = 0
): SalesCounselingRecordsConnection! # 관련 상담 기록 기존 네이밍과 일관되게 SalesCounselingRecordsConnection 으로할게요
}
enum PurchaseStatus {
PAID
AUTHORIZED
REFUNDED
CANCELLED
REIMBURSED
PENDING
READY
ASSIGNED
SURVEYED
UNKNOWN
}
input DateRangeInput {
start: DateTime! # 시작 날짜
end: DateTime! # 종료 날짜
}
input PurchaseFilterInput {
searchText: String # 통합 검색어
dateRange: DateRangeInput! # 날짜 범위
limit: Int = 100 # 페이지당 항목 수
offset: Int = 0 # 시작 위치
}
type PurchaseConnection { # 기존 네이밍과 일관되게 PurchaseConnection으로 할게요
items: [Purchase!]! # 구매 목록
totalCount: Int! # 전체 구매 수
limit: Int! # 페이지당 항목 수
offset: Int! # 시작 위치
}
type Query {
# 결제 내역 페이지 조회
purchases(filter: PurchaseFilterInput): PurchaseConnection! # 기존 네이밍과 일관되게 PurchaseConnection으로 할게요
# 결제 단건 상세 조회
purchase(id: ID!): Purchase!
}
GraphQL
복사