From 5d2e331a5c2a9b551c9a71a46e00e4e0ceaa7c46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EA=B7=BC=ED=98=95?= Date: Fri, 3 May 2024 03:42:51 +0900 Subject: [PATCH 01/14] feat: set prettier line separator `CRLF` --- .prettierrc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.prettierrc b/.prettierrc index d49732b..038c87f 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,4 +1,7 @@ { "singleQuote": true, - "plugins": ["@typespec/prettier-plugin-typespec"] + "plugins": [ + "@typespec/prettier-plugin-typespec" + ], + "endOfLine": "crlf" } From 751d4866c18a640140c6c50f5aa0cf01d55b61a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EA=B7=BC=ED=98=95?= Date: Fri, 3 May 2024 03:43:28 +0900 Subject: [PATCH 02/14] feat: /user/additional_info add model `UserAdditionalInfo` --- src/models/UserAdditionalInfo.tsp | 66 +++++++++++++++++++++++++ src/models/_barrel.tsp | 1 + src/operations/user/_barrel.tsp | 1 + src/operations/user/additional_info.tsp | 30 +++++++++++ 4 files changed, 98 insertions(+) create mode 100644 src/models/UserAdditionalInfo.tsp create mode 100644 src/operations/user/additional_info.tsp diff --git a/src/models/UserAdditionalInfo.tsp b/src/models/UserAdditionalInfo.tsp new file mode 100644 index 0000000..34c845e --- /dev/null +++ b/src/models/UserAdditionalInfo.tsp @@ -0,0 +1,66 @@ +namespace SolvedAC; + +/** + * solved.ac 사용자 개인정보입니다. + */ +model UserAdditionalInfo { + /** + * 사용자의 국가/지역 코드입니다. + * + * @example "kr" + */ + countryCode: string; + + /** + * 사용자의 성별입니다. + * - 0: 선택 안 함 + * - 1: 남성 + * - 2: 여성 + * - 9: 기타 + * + * @example 0 + */ + gender: uint64; + + /** + * 사용자를 영어로 표기할 때 사용하는 대명사입니다. + * + * @example "he/him" + */ + pronouns: string; + + /** + * 사용자의 생년입니다. + * + * @example 1998 + */ + birthYear: uint64; + + /** + * 사용자의 생월입니다. + * + * @example 8 + */ + birthMonth: uint64; + + /** + * 사용자의 생일입니다. + * + * @example 6 + */ + birthDay: uint64; + + /** + * 사용자의 영어 이름입니다. + * + * @example "Suhyun Park" + */ + name: string; + + /** + * 사용자의 모국어 이름입니다. + * + * @example "박수현" + */ + nameNative: string; +} diff --git a/src/models/_barrel.tsp b/src/models/_barrel.tsp index 0057532..5807595 100644 --- a/src/models/_barrel.tsp +++ b/src/models/_barrel.tsp @@ -25,3 +25,4 @@ import "./Organization.tsp"; import "./OrganizationType.tsp"; import "./Ranked.tsp"; import "./Emoticon.tsp"; +import "./UserAdditionalInfo.tsp"; diff --git a/src/operations/user/_barrel.tsp b/src/operations/user/_barrel.tsp index 7d2e4b7..96e6c62 100644 --- a/src/operations/user/_barrel.tsp +++ b/src/operations/user/_barrel.tsp @@ -2,3 +2,4 @@ import "./show.tsp"; import "./top_100.tsp"; import "./organizations.tsp"; import "./problem_stats.tsp"; +import "./additional_info.tsp"; diff --git a/src/operations/user/additional_info.tsp b/src/operations/user/additional_info.tsp new file mode 100644 index 0000000..b3d8f9b --- /dev/null +++ b/src/operations/user/additional_info.tsp @@ -0,0 +1,30 @@ +using TypeSpec.Http; +using TypeSpec.OpenAPI; + +namespace SolvedAC; + +/** + * 해당 핸들의 사용자 개인정보를 가져옵니다. + * + * @return + * 사용자 개인정보를 가져옵니다 + */ +@summary("사용자 핸들로 개인정보 가져오기") +@tag("user") +@get +@route("/user/additional_info") +op getUserAdditionalInfo( + /** + * 요청할 사용자명 + */ + @query + handle: string, +): GetUserAdditionalInfo.Ok; + +namespace GetUserAdditionalInfo { + @extension(XInternal, true) + model Ok { + @statusCode status: 200; + @body userAdditionalInfo: UserAdditionalInfo; + } +} From 43f8d6031bd68044d3c4c655ea4b0b1144dfc564 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EA=B7=BC=ED=98=95?= Date: Fri, 3 May 2024 05:01:53 +0900 Subject: [PATCH 03/14] feat: /post/show add model `Post` --- src/models/Post.tsp | 34 +++++++++++++++++++++++++++++++ src/models/_barrel.tsp | 1 + src/operations/_barrel.tsp | 1 + src/operations/post/_barrel.tsp | 1 + src/operations/post/show.tsp | 36 +++++++++++++++++++++++++++++++++ 5 files changed, 73 insertions(+) create mode 100644 src/models/Post.tsp create mode 100644 src/operations/post/_barrel.tsp create mode 100644 src/operations/post/show.tsp diff --git a/src/models/Post.tsp b/src/models/Post.tsp new file mode 100644 index 0000000..4e6fd3b --- /dev/null +++ b/src/models/Post.tsp @@ -0,0 +1,34 @@ +namespace SolvedAC; + +/** + * solved.ac의 도움말입니다. + */ +model Post { + /** + * 도움말의 아이디입니다. + * @example "rules_v1" + */ + postId: string; + + /** + * 도움말의 제목입니다. + * @example "solved.ac 이용 규칙 – v1" + */ + title: string; + + /** + * 도움말의 내용입니다. + * @example "이 규칙은 2020년 3월 1일부터 유효합니다.\n\n## 1\\. 난이도 기여\n\n난이도 기여는 난이도 기여 가이드라인을 기반으로 자신이 해당 문제를 해결하고 느낀 난이도를 솔직하게 표현해야 합니다. 다음과 같은 난이도 기여는 운영진 판단 하에 임의로 삭제될 수 있습니다.\n\n**a**. 특정 문제에 다른 이용자 대부분이 납득하기 힘든 난이도를 매긴 경우\n\n* 예: 1000번 문제에 Ruby I을 기여, 8481번 문제에 Bronze V를 기여\n* 2020년 이전 기여 중 Platinum과 Silver를 헷갈린 기여는 예외로 합니다.\n* 이와 같은 기여를 자신의 티어를 올릴 목적으로 한 경우, 기여가 삭제되는 것은 물론 해당 문제에 대한 경험치가 영구적으로 반영되지 않게 될 수 있습니다.\n\n**b**. 특정 문제를 해결하는 것과 관련이 없거나 도움이 전혀 되지 않는 태그를 단 경우\n* 예: 1003번 문제에 tag:dijkstra를 닮\n* 난이도 기여 전체를 삭제하는 대신, 해당 태그만 삭제될 수도 있습니다.\n* 문제와 관련 없는 태그를 납득하기 힘들 정도로 많이 달았다면 이용자에게 혼란을 주기 위함이라고 판단될 수 있습니다.\n\n**c**. 난이도 기여 경험치를 얻기 위한 목적으로, 자동화 스크립트 등을 사용해 자신이 푼 문제에 난이도를 일괄적으로 매기는 경우\n\n**d**. 경험치를 얻기 위한 목적으로, 정상적이지 않은 방법으로 난이도 기여를 한 경우\n* 정상적이지 않은 방법으로 난이도 기여가 가능함을 발견한 경우 shift@solved.ac로 즉시 신고 바랍니다. 프로필에 뱃지를 달아 드립니다.\n\n**e**. 동일인이 다중 계정을 사용해 한 문제에 1건 초과의 기여를 남긴 경우\n\n## 2. 난이도 기여 의견\n\n난이도 기여 의견은 문제 출제자들과 다른 기여자들, 그리고 문제를 푸는 사람들에 대한 존중을 바탕으로 작성되어야 합니다. 다음과 같은 의견은 운영진 판단 하에 임의로 삭제될 수 있습니다.\n\n**a**. 인종, 성, 성적 지향, 지역, 종교, 교육 수준, 생활 수준 등에 기반해 혐오적인 내용을 담고 있는 경우\n\n**b**. 출제자, 다른 기여자, 또는 문제를 푸는 사람들에 대한 비하적인 내용을 담고 있는 경우\n\n**c**. 욕설을 담고 있는 경우\n\n**d**. 문제 혹은 문제 해결과 관련이 없는 내용을 적은 경우\n\n## 3. 소스 코드 윤리\n\n다음과 같은 행위를 한 경우 운영진 판단 하에 사용 제재를 가할 수 있습니다.\n\n**a**. 경험치를 올릴 목적으로 다른 사람의 소스 코드를 그대로 혹은 수정을 가해 제출하는 행위\n\n## 4. 이벤트 참가\n\n동일인이 다중 계정을 사용해 이벤트 등에 참가할 경우 보상 획득을 임의로 제한할 수 있습니다.\n\n## 5. 아레나\n\n**a**. 아레나 참가 중에는 다른 참가자와 문제에 대해 의논하면 안 됩니다.\n\n**b**. 아레나는 1인당 한 개의 계정으로만 참가할 수 있습니다. 단, 다음의 예외를 허용합니다.\n- 이전에 다른 계정으로 아레나에 참가한 적 있을 경우, 이전 계정을 더 이상 사용하지 않으려는 경우에만 새 계정으로 참가할 수 있습니다.\n\n**c**. 동시에 두 개 이상의 다중 계정으로 아레나에 참가하면 안 됩니다.\n\n**d**. 아레나 참가 중 제출한 소스 코드는 대회 시작 시점 이전에 작성한 것이어도 괜찮습니다. 단, 제출한 코드는 제3자의 저작권 등의 권리를 침해하지 않아야 합니다.\n\n**e**. Open Contest 아레나 등, 앞서 또는 동시에 같은 문제들을 포함하여 개최된 대회가 있는 경우, 해당 대회의 참가자는 아레나에 참가하면 안 됩니다.\n\n**f**. 아레나에 참가하고자 하는 경우 대회 시작 5분 전까지 등록을 마쳐야 합니다.\n\n## 제재\n위의 사항을 위반해 기여가 삭제된 경우, 위반 행위의 심각성을 따져 추가적인 제재가 가해질 수 있습니다.\n\n* **1.c.**, **1.d.**\n - 난이도 기여 영구 제한 및 사이트 이용 제한.\n* **1.e.**\n - (해당하는 다중 계정에 대해) 난이도 기여 영구 제한.\n* **2.a.**, **2.b.**, **2.c.**\n - 난이도 기여 30일 제한. 최근 365일간 3회 이상 반복되었을 경우 난이도 기여 영구 제한.\n* **1.a.**, **1.b.**, **2.d.**\n - 악의가 있다고 판단될 경우, 난이도 기여 7일 제한 및 해당 문제에 대해 난이도 기여 영구 제한. 최근 365일간 5회 이상 반복되었을 경우 난이도 기여 영구 제한.\n* **3.a.**\n - 해당 계정의 경험치, 레이팅, CLASS를 영구히 0으로 설정.\n - 레이팅을 0으로 설정하는 기간 동안 이벤트 등에 참가하더라도 보상을 부여하지 않으며, 순위 집계 시 해당 유저를 제외함.\n* **5.a.**, **5.b.**, **5.c.**, **5.d.**, **5.e.**\n - 해당 계정의 아레나 레이팅을 영구히 0으로 설정.\n\n추가로, 운영진 판단 하에 규칙을 위반한 해당 사용자의 기여를 전부 삭제하거나 사이트 이용을 영구 제한할 수 있습니다." + */ + content: string; + + /** + * 도움말가 작성된 언어입니다. + */ + language: string; + + /** + * 도움말의 타입입니다. + */ + type: string; +} diff --git a/src/models/_barrel.tsp b/src/models/_barrel.tsp index 5807595..9ed7c2f 100644 --- a/src/models/_barrel.tsp +++ b/src/models/_barrel.tsp @@ -26,3 +26,4 @@ import "./OrganizationType.tsp"; import "./Ranked.tsp"; import "./Emoticon.tsp"; import "./UserAdditionalInfo.tsp"; +import "./Post.tsp"; diff --git a/src/operations/_barrel.tsp b/src/operations/_barrel.tsp index 7fb1f63..6560acd 100644 --- a/src/operations/_barrel.tsp +++ b/src/operations/_barrel.tsp @@ -7,3 +7,4 @@ import "./ranking/_barrel.tsp"; import "./search/_barrel.tsp"; import "./site/_barrel.tsp"; import "./user/_barrel.tsp"; +import "./post/_barrel.tsp"; diff --git a/src/operations/post/_barrel.tsp b/src/operations/post/_barrel.tsp new file mode 100644 index 0000000..c27a06a --- /dev/null +++ b/src/operations/post/_barrel.tsp @@ -0,0 +1 @@ +import "./show.tsp"; diff --git a/src/operations/post/show.tsp b/src/operations/post/show.tsp new file mode 100644 index 0000000..07e5f32 --- /dev/null +++ b/src/operations/post/show.tsp @@ -0,0 +1,36 @@ +using TypeSpec.Http; +using TypeSpec.OpenAPI; + +namespace SolvedAC; + +/** + * 해당 제목의 도움말를 가져옵니다. + * + * @return + * 도움말를 가져옵니다. + */ +@summary("도움말 제목으로 도움말 가져오기") +@tag("post") +@get +@route("/post/show") +op getPostById( + /** + * 응답을 받을 언어입니다. + */ + @header + `x-solvedac-language`?: Language, + + /** + * 요청할 도움말의 제목 + */ + @query + postId: string, +): GetPostById.Ok; + +namespace GetPostById { + @extension(XInternal, true) + model Ok { + @statusCode status: 200; + @body post: Post; + } +} From 1c3e8c65e37531a7a2c2c5e59ef87e9bcd3b589f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EA=B7=BC=ED=98=95?= Date: Fri, 3 May 2024 05:13:27 +0900 Subject: [PATCH 04/14] feat: /tag/list /tag/show --- src/operations/_barrel.tsp | 1 + src/operations/tag/_barrel.tsp | 2 ++ src/operations/tag/list.tsp | 30 ++++++++++++++++++++++++++++++ src/operations/tag/show.tsp | 30 ++++++++++++++++++++++++++++++ 4 files changed, 63 insertions(+) create mode 100644 src/operations/tag/_barrel.tsp create mode 100644 src/operations/tag/list.tsp create mode 100644 src/operations/tag/show.tsp diff --git a/src/operations/_barrel.tsp b/src/operations/_barrel.tsp index 6560acd..283a177 100644 --- a/src/operations/_barrel.tsp +++ b/src/operations/_barrel.tsp @@ -8,3 +8,4 @@ import "./search/_barrel.tsp"; import "./site/_barrel.tsp"; import "./user/_barrel.tsp"; import "./post/_barrel.tsp"; +import "./tag/_barrel.tsp"; diff --git a/src/operations/tag/_barrel.tsp b/src/operations/tag/_barrel.tsp new file mode 100644 index 0000000..0d7726b --- /dev/null +++ b/src/operations/tag/_barrel.tsp @@ -0,0 +1,2 @@ +import "./list.tsp"; +import "./show.tsp"; diff --git a/src/operations/tag/list.tsp b/src/operations/tag/list.tsp new file mode 100644 index 0000000..d73371f --- /dev/null +++ b/src/operations/tag/list.tsp @@ -0,0 +1,30 @@ +using TypeSpec.Http; +using TypeSpec.OpenAPI; + +namespace SolvedAC; + +/** + * 태그 목록을 가져옵니다. + * + * @return + * 태그 목록을 가져옵니다. + */ +@summary("태그 목록 가져오기") +@tag("tag") +@get +@route("/tag/list") +op getTagList( + /** + * 페이지 + */ + @query + page?: uint32, +): GetTagList.Ok; + +namespace GetTagList { + @extension(XInternal, true) + model Ok { + @statusCode status: 200; + @body data: PaginatedList; + } +} diff --git a/src/operations/tag/show.tsp b/src/operations/tag/show.tsp new file mode 100644 index 0000000..d8e2a04 --- /dev/null +++ b/src/operations/tag/show.tsp @@ -0,0 +1,30 @@ +using TypeSpec.Http; +using TypeSpec.OpenAPI; + +namespace SolvedAC; + +/** + * 태그 ID로 태그 정보를 가져옵니다. + * + * @return + * 태그 정보를 가져옵니다. + */ +@summary("태그 ID로 태그 정보 가져오기") +@tag("tag") +@get +@route("/tag/show") +op getTagByKey( + /** + * 태그 ID + */ + @query + key: string, +): GetTagByKey.Ok; + +namespace GetTagByKey { + @extension(XInternal, true) + model Ok { + @statusCode status: 200; + @body tag: ProblemTag; + } +} From 1438913a7610aca3a83ffdd050e75356e7f0609a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EA=B7=BC=ED=98=95?= Date: Fri, 3 May 2024 05:32:27 +0900 Subject: [PATCH 05/14] feat: /user/class_stats --- src/operations/user/_barrel.tsp | 1 + src/operations/user/class_stats.tsp | 154 ++++++++++++++++++++++++++++ 2 files changed, 155 insertions(+) create mode 100644 src/operations/user/class_stats.tsp diff --git a/src/operations/user/_barrel.tsp b/src/operations/user/_barrel.tsp index 96e6c62..9e5cd25 100644 --- a/src/operations/user/_barrel.tsp +++ b/src/operations/user/_barrel.tsp @@ -3,3 +3,4 @@ import "./top_100.tsp"; import "./organizations.tsp"; import "./problem_stats.tsp"; import "./additional_info.tsp"; +import "./class_stats.tsp"; diff --git a/src/operations/user/class_stats.tsp b/src/operations/user/class_stats.tsp new file mode 100644 index 0000000..ad809b6 --- /dev/null +++ b/src/operations/user/class_stats.tsp @@ -0,0 +1,154 @@ +using TypeSpec.Http; +using TypeSpec.OpenAPI; + +namespace SolvedAC; + +/** + * 해당 핸들의 사용자가 푼 문제 수를 클래스별로 나누어 가져옵니다. + * + * @return + * 클래스별 푼 문제 수가 담긴 목록 + */ +@summary("클래스별로 사용자가 푼 문제 수 가져오기") +@tag("user") +@get +@route("/user/class_stats") +op getUserClassStats( + /** + * 요청할 사용자명 + */ + @query + handle: string, +): GetUserClassStats.Ok; + +namespace GetUserClassStats { + /** + * @example + * [ + * { + * "total": 36, + * "totalSolved": 36, + * "essentials": 16, + * "essentialSolved": 16, + * "class": 1, + * "decoration": "gold" + * }, + * { + * "total": 40, + * "totalSolved": 40, + * "essentials": 20, + * "essentialSolved": 20, + * "class": 2, + * "decoration": "gold" + * }, + * { + * "total": 48, + * "totalSolved": 48, + * "essentials": 20, + * "essentialSolved": 20, + * "class": 3, + * "decoration": "gold" + * }, + * { + * "total": 48, + * "totalSolved": 40, + * "essentials": 24, + * "essentialSolved": 22, + * "class": 4, + * "decoration": "none" + * }, + * { + * "total": 48, + * "totalSolved": 26, + * "essentials": 24, + * "essentialSolved": 13, + * "class": 5, + * "decoration": "none" + * }, + * { + * "total": 48, + * "totalSolved": 24, + * "essentials": 24, + * "essentialSolved": 8, + * "class": 6, + * "decoration": "none" + * }, + * { + * "total": 48, + * "totalSolved": 13, + * "essentials": 24, + * "essentialSolved": 7, + * "class": 7, + * "decoration": null + * }, + * { + * "total": 48, + * "totalSolved": 1, + * "essentials": 24, + * "essentialSolved": 1, + * "class": 8, + * "decoration": null + * }, + * { + * "total": 48, + * "totalSolved": 0, + * "essentials": 24, + * "essentialSolved": 0, + * "class": 9, + * "decoration": null + * }, + * { + * "total": 48, + * "totalSolved": 0, + * "essentials": 24, + * "essentialSolved": 0, + * "class": 10, + * "decoration": null + * } + * ] + */ + @extension(XInternal, true) + model Ok { + @statusCode status: 200; + @body data: Array; + } + + @extension(XInternal, true) + model ClassStat { + /** + * 클래스 번호입니다. + * @example 1 + */ + class: Class; + + /** + * solved.ac에 등록된 해당 클래스의 문제 수입니다. + * @example 36 + */ + total: uint64; + + /** + * 사용자가 푼 클래스 문제 수입니다. + * @example 36 + */ + totalSolved: uint64; + + /** + * solved.ac에 등록된 해당 클래스의 에센셜 문제 수입니다. + * @example 16 + */ + essentials: uint64; + + /** + * 사용자가 푼 클래스 에센셜 문제 수입니다. + * @example 16 + */ + essentialSolved: uint64; + + /** + * 사용자가 획득한 클래스 치장입니다. + * @example "gold" + */ + decoration: string; + } +} From 27cb519f754b628a0c6d9c3723cfdaf0c4af56ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EA=B7=BC=ED=98=95?= Date: Fri, 3 May 2024 05:44:38 +0900 Subject: [PATCH 06/14] feat: /user/contribution_stats /user/problem_tag_stats --- src/operations/user/_barrel.tsp | 2 + src/operations/user/contribution_stats.tsp | 247 +++++++++++++++++++++ src/operations/user/problem_tag_stats.tsp | 56 +++++ 3 files changed, 305 insertions(+) create mode 100644 src/operations/user/contribution_stats.tsp create mode 100644 src/operations/user/problem_tag_stats.tsp diff --git a/src/operations/user/_barrel.tsp b/src/operations/user/_barrel.tsp index 9e5cd25..0af6008 100644 --- a/src/operations/user/_barrel.tsp +++ b/src/operations/user/_barrel.tsp @@ -4,3 +4,5 @@ import "./organizations.tsp"; import "./problem_stats.tsp"; import "./additional_info.tsp"; import "./class_stats.tsp"; +import "./contribution_stats.tsp"; +import "./problem_tag_stats.tsp"; diff --git a/src/operations/user/contribution_stats.tsp b/src/operations/user/contribution_stats.tsp new file mode 100644 index 0000000..1fdcbcf --- /dev/null +++ b/src/operations/user/contribution_stats.tsp @@ -0,0 +1,247 @@ +using TypeSpec.Http; +using TypeSpec.OpenAPI; + +namespace SolvedAC; + +/** + * 해당 핸들의 사용자가 기여한 문제 수를 문제 수준별로 나누어 가져옵니다. + * + * @return + * 문제 수준별 기여한 문제 수가 담긴 목록 + */ +@summary("문제 수준별로 사용자가 기여한 문제 수 가져오기") +@tag("user") +@get +@route("/user/contribution_stats") +op getUserContributionStats( + /** + * 요청할 사용자명 + */ + @query + handle: string, +): GetUserContributionStats.Ok; + +namespace GetUserContributionStats { + /** + * @example + *{ + *[ + * { + * "total": 7071, + * "solved": 11, + * "solvedStandards": 9, + * "contributed": 0 + * }, + * { + * "total": 308, + * "solved": 154, + * "solvedStandards": 49, + * "contributed": 79 + * }, + * { + * "total": 568, + * "solved": 284, + * "solvedStandards": 13, + * "contributed": 205 + * }, + * { + * "total": 1370, + * "solved": 664, + * "solvedStandards": 12, + * "contributed": 584 + * }, + * { + * "total": 1403, + * "solved": 497, + * "solvedStandards": 17, + * "contributed": 344 + * }, + * { + * "total": 1011, + * "solved": 220, + * "solvedStandards": 2, + * "contributed": 144 + * }, + * { + * "total": 1009, + * "solved": 213, + * "solvedStandards": 2, + * "contributed": 8 + * }, + * { + * "total": 1008, + * "solved": 153, + * "solvedStandards": 1, + * "contributed": 2 + * }, + * { + * "total": 1011, + * "solved": 115, + * "solvedStandards": 11, + * "contributed": 2 + * }, + * { + * "total": 1077, + * "solved": 118, + * "solvedStandards": 11, + * "contributed": 1 + * }, + * { + * "total": 1167, + * "solved": 97, + * "solvedStandards": 3, + * "contributed": 2 + * }, + * { + * "total": 1052, + * "solved": 97, + * "solvedStandards": 5, + * "contributed": 2 + * }, + * { + * "total": 1532, + * "solved": 85, + * "solvedStandards": 2, + * "contributed": 8 + * }, + * { + * "total": 1387, + * "solved": 50, + * "solvedStandards": 1, + * "contributed": 8 + * }, + * { + * "total": 1197, + * "solved": 44, + * "solvedStandards": 0, + * "contributed": 11 + * }, + * { + * "total": 1106, + * "solved": 55, + * "solvedStandards": 12, + * "contributed": 18 + * }, + * { + * "total": 1287, + * "solved": 94, + * "solvedStandards": 2, + * "contributed": 12 + * }, + * { + * "total": 1226, + * "solved": 66, + * "solvedStandards": 2, + * "contributed": 6 + * }, + * { + * "total": 1243, + * "solved": 53, + * "solvedStandards": 0, + * "contributed": 4 + * }, + * { + * "total": 1181, + * "solved": 22, + * "solvedStandards": 0, + * "contributed": 0 + * }, + * { + * "total": 896, + * "solved": 9, + * "solvedStandards": 2, + * "contributed": 2 + * }, + * { + * "total": 941, + * "solved": 6, + * "solvedStandards": 0, + * "contributed": 1 + * }, + * { + * "total": 880, + * "solved": 5, + * "solvedStandards": 0, + * "contributed": 0 + * }, + * { + * "total": 618, + * "solved": 0, + * "solvedStandards": 0, + * "contributed": 0 + * }, + * { + * "total": 452, + * "solved": 0, + * "solvedStandards": 0, + * "contributed": 0 + * }, + * { + * "total": 355, + * "solved": 0, + * "solvedStandards": 0, + * "contributed": 0 + * }, + * { + * "total": 285, + * "solved": 0, + * "solvedStandards": 0, + * "contributed": 0 + * }, + * { + * "total": 150, + * "solved": 0, + * "solvedStandards": 0, + * "contributed": 0 + * }, + * { + * "total": 92, + * "solved": 0, + * "solvedStandards": 0, + * "contributed": 0 + * }, + * { + * "total": 34, + * "solved": 0, + * "solvedStandards": 0, + * "contributed": 0 + * }, + * { + * "total": 28, + * "solved": 0, + * "solvedStandards": 0, + * "contributed": 0 + * } + *] + *} + */ + @extension(XInternal, true) + model Ok { + @statusCode status: 200; + @body data: Array; + } + + @extension(XInternal, true) + model ContributionStat { + /** + * solved.ac에 등록된 해당 수준 문제 수입니다. + * @example 0 + */ + total: uint64; + + /** + * 사용자가 푼 문제 수입니다. + */ + solved: uint64; + + /** + * 사용자가 푼 표준 문제 수입니다. + */ + solvedStandards: uint64; + + /** + * 사용자가 기여한 문제 수입니다. + */ + contributed: uint64; + } +} diff --git a/src/operations/user/problem_tag_stats.tsp b/src/operations/user/problem_tag_stats.tsp new file mode 100644 index 0000000..fda28ac --- /dev/null +++ b/src/operations/user/problem_tag_stats.tsp @@ -0,0 +1,56 @@ +using TypeSpec.Http; +using TypeSpec.OpenAPI; + +namespace SolvedAC; + +/** + * 해당 핸들의 사용자가 푼 문제 수를 태그별로 나누어 가져옵니다. + * + * @return + * 태그별 푼 문제 수가 담긴 목록 + */ +@summary("태그별로 사용자가 푼 문제 수 가져오기") +@tag("user") +@get +@route("/user/problem_tag_stats") +op getUserProblemTagStats( + /** + * 요청할 사용자명 + */ + @query + handle: string, +): GetUserProblemTagStats.Ok; + +namespace GetUserProblemTagStats { + @extension(XInternal, true) + model Ok { + @statusCode status: 200; + @body data: PaginatedList; + } + + @extension(XInternal, true) + model ProblemTagStat { + tag: ProblemTag; + + /** + * solved.ac에 등록된 해당 태그 문제 수입니다. + * @example 0 + */ + total: uint64; + + /** + * 사용자가 푼 문제 수입니다. + */ + solved: uint64; + + /** + * 사용자가 부분 성공한 문제 수입니다. + */ + partial: uint64; + + /** + * 사용자가 시도해 본 문제 수입니다. + */ + tried: uint64; + } +} From 850675777d04db79b447ed2a902db623eca181ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EA=B7=BC=ED=98=95?= Date: Fri, 3 May 2024 06:02:50 +0900 Subject: [PATCH 07/14] feat: /organization/show --- src/operations/_barrel.tsp | 5 +++-- src/operations/organization/_barrel.tsp | 1 + src/operations/organization/show.tsp | 30 +++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 src/operations/organization/_barrel.tsp create mode 100644 src/operations/organization/show.tsp diff --git a/src/operations/_barrel.tsp b/src/operations/_barrel.tsp index 283a177..86dc839 100644 --- a/src/operations/_barrel.tsp +++ b/src/operations/_barrel.tsp @@ -2,10 +2,11 @@ import "./account/_barrel.tsp"; import "./background/_barrel.tsp"; import "./badge/_barrel.tsp"; import "./coins/_barrel.tsp"; +import "./organization/_barrel.tsp"; +import "./post/_barrel.tsp"; import "./problem/_barrel.tsp"; import "./ranking/_barrel.tsp"; import "./search/_barrel.tsp"; import "./site/_barrel.tsp"; -import "./user/_barrel.tsp"; -import "./post/_barrel.tsp"; import "./tag/_barrel.tsp"; +import "./user/_barrel.tsp"; diff --git a/src/operations/organization/_barrel.tsp b/src/operations/organization/_barrel.tsp new file mode 100644 index 0000000..c27a06a --- /dev/null +++ b/src/operations/organization/_barrel.tsp @@ -0,0 +1 @@ +import "./show.tsp"; diff --git a/src/operations/organization/show.tsp b/src/operations/organization/show.tsp new file mode 100644 index 0000000..38d3654 --- /dev/null +++ b/src/operations/organization/show.tsp @@ -0,0 +1,30 @@ +using TypeSpec.Http; +using TypeSpec.OpenAPI; + +namespace SolvedAC; + +/** + * 해당 ID의 단체 정보를 가져옵니다. + * + * @return + * 단체 정보를 가져옵니다. + */ +@summary("단체 ID로 단체 정보 가져오기") +@tag("organization") +@get +@route("/organization/show") +op getOrganizationById( + /** + * 요청할 단체의 ID + */ + @query + organizationId: string, +): GetOrganizationById.Ok; + +namespace GetOrganizationById { + @extension(XInternal, true) + model Ok { + @statusCode status: 200; + @body organization: Organization; + } +} From 3e85bf0c99bb454e3e35309f60f6f7eda5fb4622 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EA=B7=BC=ED=98=95?= Date: Fri, 3 May 2024 06:10:58 +0900 Subject: [PATCH 08/14] feat: /ranking/in_organization /ranking/arena_in_organization --- src/operations/ranking/_barrel.tsp | 2 ++ .../ranking/arena_in_organization.tsp | 36 +++++++++++++++++++ src/operations/ranking/in_organization.tsp | 36 +++++++++++++++++++ 3 files changed, 74 insertions(+) create mode 100644 src/operations/ranking/arena_in_organization.tsp create mode 100644 src/operations/ranking/in_organization.tsp diff --git a/src/operations/ranking/_barrel.tsp b/src/operations/ranking/_barrel.tsp index 9e413e8..bc805d7 100644 --- a/src/operations/ranking/_barrel.tsp +++ b/src/operations/ranking/_barrel.tsp @@ -5,3 +5,5 @@ import "./reverse_rival.tsp"; import "./rival.tsp"; import "./tier.tsp"; import "./organization.tsp"; +import "./in_organization.tsp"; +import "./arena_in_organization.tsp"; diff --git a/src/operations/ranking/arena_in_organization.tsp b/src/operations/ranking/arena_in_organization.tsp new file mode 100644 index 0000000..62776c1 --- /dev/null +++ b/src/operations/ranking/arena_in_organization.tsp @@ -0,0 +1,36 @@ +using TypeSpec.Http; +using TypeSpec.OpenAPI; + +namespace SolvedAC; + +/** + * 해당 단체에 속한 사용자 중에서 아레나 레이팅이 높은 사용자가 먼저 오도록 정렬한 목록을 가져옵니다. + * + * @return + * 페이지네이션 가능한 사용자 목록을 반환합니다. + */ +@summary("아레나 레이팅 순 단체 내 랭킹 가져오기") +@tag("ranking") +@get +@route("/ranking/arena_in_organization") +op getArenaInOrganizationRankingByACRating( + /** + * 단체 ID + */ + @query + organizationId: uint32, + + /** + * 페이지 + */ + @query + page?: uint32, +): GetArenaInOrganizationRankingByACRating.Ok; + +namespace GetArenaInOrganizationRankingByACRating { + @extension(XInternal, true) + model Ok { + @statusCode status: 200; + @body data: PaginatedList; + } +} diff --git a/src/operations/ranking/in_organization.tsp b/src/operations/ranking/in_organization.tsp new file mode 100644 index 0000000..a5bcc32 --- /dev/null +++ b/src/operations/ranking/in_organization.tsp @@ -0,0 +1,36 @@ +using TypeSpec.Http; +using TypeSpec.OpenAPI; + +namespace SolvedAC; + +/** + * 해당 단체에 속한 사용자 중에서 문제풀이 레이팅이 높은 사용자가 먼저 오도록 정렬한 목록을 가져옵니다. + * + * @return + * 페이지네이션 가능한 사용자 목록을 반환합니다. + */ +@summary("문제풀이 레이팅 순 단체 내 랭킹 가져오기") +@tag("ranking") +@get +@route("/ranking/in_organization") +op getInOrganizationRankingByACRating( + /** + * 단체 ID + */ + @query + organizationId: uint32, + + /** + * 페이지 + */ + @query + page?: uint32, +): GetInOrganizationRankingByACRating.Ok; + +namespace GetInOrganizationRankingByACRating { + @extension(XInternal, true) + model Ok { + @statusCode status: 200; + @body data: PaginatedList; + } +} From d31dad772a366df52812e1e22efcbfd193420f94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EA=B7=BC=ED=98=95?= Date: Fri, 3 May 2024 06:15:27 +0900 Subject: [PATCH 09/14] =?UTF-8?q?fix:=20/post/show=20=EC=84=A4=EB=AA=85=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/operations/post/show.tsp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/operations/post/show.tsp b/src/operations/post/show.tsp index 07e5f32..1e79f9d 100644 --- a/src/operations/post/show.tsp +++ b/src/operations/post/show.tsp @@ -4,10 +4,10 @@ using TypeSpec.OpenAPI; namespace SolvedAC; /** - * 해당 제목의 도움말를 가져옵니다. + * 해당 제목의 도움말을 가져옵니다. * * @return - * 도움말를 가져옵니다. + * 도움말을 가져옵니다. */ @summary("도움말 제목으로 도움말 가져오기") @tag("post") From 83d0d13f389f171f920e7b728f39f8b11a306e34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EA=B7=BC=ED=98=95?= Date: Fri, 26 Jul 2024 19:42:55 +0900 Subject: [PATCH 10/14] fix: rollback .prettierrc endOfLine to `lf` --- .prettierrc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.prettierrc b/.prettierrc index 038c87f..6ed31c7 100644 --- a/.prettierrc +++ b/.prettierrc @@ -2,6 +2,5 @@ "singleQuote": true, "plugins": [ "@typespec/prettier-plugin-typespec" - ], - "endOfLine": "crlf" + ] } From 7e740afd3d8f2f6011f31278fabdf9065a3ab0db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EA=B7=BC=ED=98=95?= Date: Fri, 26 Jul 2024 19:56:27 +0900 Subject: [PATCH 11/14] fix: getRankingByArenaRatingInOrganization --- src/operations/ranking/arena_in_organization.tsp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/operations/ranking/arena_in_organization.tsp b/src/operations/ranking/arena_in_organization.tsp index 62776c1..7566831 100644 --- a/src/operations/ranking/arena_in_organization.tsp +++ b/src/operations/ranking/arena_in_organization.tsp @@ -13,7 +13,7 @@ namespace SolvedAC; @tag("ranking") @get @route("/ranking/arena_in_organization") -op getArenaInOrganizationRankingByACRating( +op getRankingByArenaRatingInOrganization( /** * 단체 ID */ @@ -25,9 +25,9 @@ op getArenaInOrganizationRankingByACRating( */ @query page?: uint32, -): GetArenaInOrganizationRankingByACRating.Ok; +): GetRankingByArenaRatingInOrganization.Ok; -namespace GetArenaInOrganizationRankingByACRating { +namespace GetRankingByArenaRatingInOrganization { @extension(XInternal, true) model Ok { @statusCode status: 200; From d3da6cbf01827671abb9f7767c44b5366b3873bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EA=B7=BC=ED=98=95?= Date: Fri, 26 Jul 2024 19:57:05 +0900 Subject: [PATCH 12/14] fix: getRankingByACRatingInOrganization --- src/operations/ranking/in_organization.tsp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/operations/ranking/in_organization.tsp b/src/operations/ranking/in_organization.tsp index a5bcc32..8192226 100644 --- a/src/operations/ranking/in_organization.tsp +++ b/src/operations/ranking/in_organization.tsp @@ -13,7 +13,7 @@ namespace SolvedAC; @tag("ranking") @get @route("/ranking/in_organization") -op getInOrganizationRankingByACRating( +op getRankingByACRatingInOrganization( /** * 단체 ID */ @@ -25,9 +25,9 @@ op getInOrganizationRankingByACRating( */ @query page?: uint32, -): GetInOrganizationRankingByACRating.Ok; +): GetRankingByACRatingInOrganization.Ok; -namespace GetInOrganizationRankingByACRating { +namespace GetRankingByACRatingInOrganization { @extension(XInternal, true) model Ok { @statusCode status: 200; From 6ca189008de6a5f0b4d723db9e3e42016f0ffbdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EA=B7=BC=ED=98=95?= Date: Fri, 26 Jul 2024 19:59:19 +0900 Subject: [PATCH 13/14] =?UTF-8?q?fix:=20additional=5Finfo=20=EB=B2=88?= =?UTF-8?q?=EC=97=AD=20`=EB=B6=80=EA=B0=80=20=EC=A0=95=EB=B3=B4`=EB=A1=9C?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/models/UserAdditionalInfo.tsp | 2 +- src/operations/user/additional_info.tsp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/models/UserAdditionalInfo.tsp b/src/models/UserAdditionalInfo.tsp index 34c845e..5d41e8b 100644 --- a/src/models/UserAdditionalInfo.tsp +++ b/src/models/UserAdditionalInfo.tsp @@ -1,7 +1,7 @@ namespace SolvedAC; /** - * solved.ac 사용자 개인정보입니다. + * solved.ac 사용자 부가 정보입니다. */ model UserAdditionalInfo { /** diff --git a/src/operations/user/additional_info.tsp b/src/operations/user/additional_info.tsp index b3d8f9b..11f5558 100644 --- a/src/operations/user/additional_info.tsp +++ b/src/operations/user/additional_info.tsp @@ -4,12 +4,12 @@ using TypeSpec.OpenAPI; namespace SolvedAC; /** - * 해당 핸들의 사용자 개인정보를 가져옵니다. + * 해당 핸들을 가진 사용자의 부가 정보를 가져옵니다. * * @return - * 사용자 개인정보를 가져옵니다 + * 사용자 부가 정보를 가져옵니다 */ -@summary("사용자 핸들로 개인정보 가져오기") +@summary("사용자 핸들로 부가 정보 가져오기") @tag("user") @get @route("/user/additional_info") From d528af86c22c216b80a503f5b4eeb3eb64de87c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EA=B7=BC=ED=98=95?= Date: Fri, 26 Jul 2024 20:02:05 +0900 Subject: [PATCH 14/14] =?UTF-8?q?fix:=20post=20=EB=B2=88=EC=97=AD=20`?= =?UTF-8?q?=EA=B2=8C=EC=8B=9C=EA=B8=80`=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/models/Post.tsp | 12 ++++++------ src/operations/post/show.tsp | 8 ++++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/models/Post.tsp b/src/models/Post.tsp index 4e6fd3b..a5f6e7a 100644 --- a/src/models/Post.tsp +++ b/src/models/Post.tsp @@ -1,34 +1,34 @@ namespace SolvedAC; /** - * solved.ac의 도움말입니다. + * solved.ac의 게시글입니다. */ model Post { /** - * 도움말의 아이디입니다. + * 게시글의 아이디입니다. * @example "rules_v1" */ postId: string; /** - * 도움말의 제목입니다. + * 게시글의 제목입니다. * @example "solved.ac 이용 규칙 – v1" */ title: string; /** - * 도움말의 내용입니다. + * 게시글의 내용입니다. * @example "이 규칙은 2020년 3월 1일부터 유효합니다.\n\n## 1\\. 난이도 기여\n\n난이도 기여는 난이도 기여 가이드라인을 기반으로 자신이 해당 문제를 해결하고 느낀 난이도를 솔직하게 표현해야 합니다. 다음과 같은 난이도 기여는 운영진 판단 하에 임의로 삭제될 수 있습니다.\n\n**a**. 특정 문제에 다른 이용자 대부분이 납득하기 힘든 난이도를 매긴 경우\n\n* 예: 1000번 문제에 Ruby I을 기여, 8481번 문제에 Bronze V를 기여\n* 2020년 이전 기여 중 Platinum과 Silver를 헷갈린 기여는 예외로 합니다.\n* 이와 같은 기여를 자신의 티어를 올릴 목적으로 한 경우, 기여가 삭제되는 것은 물론 해당 문제에 대한 경험치가 영구적으로 반영되지 않게 될 수 있습니다.\n\n**b**. 특정 문제를 해결하는 것과 관련이 없거나 도움이 전혀 되지 않는 태그를 단 경우\n* 예: 1003번 문제에 tag:dijkstra를 닮\n* 난이도 기여 전체를 삭제하는 대신, 해당 태그만 삭제될 수도 있습니다.\n* 문제와 관련 없는 태그를 납득하기 힘들 정도로 많이 달았다면 이용자에게 혼란을 주기 위함이라고 판단될 수 있습니다.\n\n**c**. 난이도 기여 경험치를 얻기 위한 목적으로, 자동화 스크립트 등을 사용해 자신이 푼 문제에 난이도를 일괄적으로 매기는 경우\n\n**d**. 경험치를 얻기 위한 목적으로, 정상적이지 않은 방법으로 난이도 기여를 한 경우\n* 정상적이지 않은 방법으로 난이도 기여가 가능함을 발견한 경우 shift@solved.ac로 즉시 신고 바랍니다. 프로필에 뱃지를 달아 드립니다.\n\n**e**. 동일인이 다중 계정을 사용해 한 문제에 1건 초과의 기여를 남긴 경우\n\n## 2. 난이도 기여 의견\n\n난이도 기여 의견은 문제 출제자들과 다른 기여자들, 그리고 문제를 푸는 사람들에 대한 존중을 바탕으로 작성되어야 합니다. 다음과 같은 의견은 운영진 판단 하에 임의로 삭제될 수 있습니다.\n\n**a**. 인종, 성, 성적 지향, 지역, 종교, 교육 수준, 생활 수준 등에 기반해 혐오적인 내용을 담고 있는 경우\n\n**b**. 출제자, 다른 기여자, 또는 문제를 푸는 사람들에 대한 비하적인 내용을 담고 있는 경우\n\n**c**. 욕설을 담고 있는 경우\n\n**d**. 문제 혹은 문제 해결과 관련이 없는 내용을 적은 경우\n\n## 3. 소스 코드 윤리\n\n다음과 같은 행위를 한 경우 운영진 판단 하에 사용 제재를 가할 수 있습니다.\n\n**a**. 경험치를 올릴 목적으로 다른 사람의 소스 코드를 그대로 혹은 수정을 가해 제출하는 행위\n\n## 4. 이벤트 참가\n\n동일인이 다중 계정을 사용해 이벤트 등에 참가할 경우 보상 획득을 임의로 제한할 수 있습니다.\n\n## 5. 아레나\n\n**a**. 아레나 참가 중에는 다른 참가자와 문제에 대해 의논하면 안 됩니다.\n\n**b**. 아레나는 1인당 한 개의 계정으로만 참가할 수 있습니다. 단, 다음의 예외를 허용합니다.\n- 이전에 다른 계정으로 아레나에 참가한 적 있을 경우, 이전 계정을 더 이상 사용하지 않으려는 경우에만 새 계정으로 참가할 수 있습니다.\n\n**c**. 동시에 두 개 이상의 다중 계정으로 아레나에 참가하면 안 됩니다.\n\n**d**. 아레나 참가 중 제출한 소스 코드는 대회 시작 시점 이전에 작성한 것이어도 괜찮습니다. 단, 제출한 코드는 제3자의 저작권 등의 권리를 침해하지 않아야 합니다.\n\n**e**. Open Contest 아레나 등, 앞서 또는 동시에 같은 문제들을 포함하여 개최된 대회가 있는 경우, 해당 대회의 참가자는 아레나에 참가하면 안 됩니다.\n\n**f**. 아레나에 참가하고자 하는 경우 대회 시작 5분 전까지 등록을 마쳐야 합니다.\n\n## 제재\n위의 사항을 위반해 기여가 삭제된 경우, 위반 행위의 심각성을 따져 추가적인 제재가 가해질 수 있습니다.\n\n* **1.c.**, **1.d.**\n - 난이도 기여 영구 제한 및 사이트 이용 제한.\n* **1.e.**\n - (해당하는 다중 계정에 대해) 난이도 기여 영구 제한.\n* **2.a.**, **2.b.**, **2.c.**\n - 난이도 기여 30일 제한. 최근 365일간 3회 이상 반복되었을 경우 난이도 기여 영구 제한.\n* **1.a.**, **1.b.**, **2.d.**\n - 악의가 있다고 판단될 경우, 난이도 기여 7일 제한 및 해당 문제에 대해 난이도 기여 영구 제한. 최근 365일간 5회 이상 반복되었을 경우 난이도 기여 영구 제한.\n* **3.a.**\n - 해당 계정의 경험치, 레이팅, CLASS를 영구히 0으로 설정.\n - 레이팅을 0으로 설정하는 기간 동안 이벤트 등에 참가하더라도 보상을 부여하지 않으며, 순위 집계 시 해당 유저를 제외함.\n* **5.a.**, **5.b.**, **5.c.**, **5.d.**, **5.e.**\n - 해당 계정의 아레나 레이팅을 영구히 0으로 설정.\n\n추가로, 운영진 판단 하에 규칙을 위반한 해당 사용자의 기여를 전부 삭제하거나 사이트 이용을 영구 제한할 수 있습니다." */ content: string; /** - * 도움말가 작성된 언어입니다. + * 게시글이 작성된 언어입니다. */ language: string; /** - * 도움말의 타입입니다. + * 게시글 내용의 타입입니다. */ type: string; } diff --git a/src/operations/post/show.tsp b/src/operations/post/show.tsp index 1e79f9d..588c03d 100644 --- a/src/operations/post/show.tsp +++ b/src/operations/post/show.tsp @@ -4,12 +4,12 @@ using TypeSpec.OpenAPI; namespace SolvedAC; /** - * 해당 제목의 도움말을 가져옵니다. + * 해당 제목의 게시글을 가져옵니다. * * @return - * 도움말을 가져옵니다. + * 게시글을 가져옵니다. */ -@summary("도움말 제목으로 도움말 가져오기") +@summary("게시글 제목으로 게시글 가져오기") @tag("post") @get @route("/post/show") @@ -21,7 +21,7 @@ op getPostById( `x-solvedac-language`?: Language, /** - * 요청할 도움말의 제목 + * 요청할 게시글의 제목 */ @query postId: string,