From 45a4f1361f6dc7fd28c8db83c9c129a8b0f189bf Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Tue, 24 Nov 2020 14:45:40 -0500 Subject: [PATCH] chore(spec): replace ugly hack with another hack for optional properties --- .../components/schemas/TopicObject.yaml | 422 +++++++++--------- public/openapi/read/topic/topic_id.yaml | 11 + 2 files changed, 210 insertions(+), 223 deletions(-) diff --git a/public/openapi/components/schemas/TopicObject.yaml b/public/openapi/components/schemas/TopicObject.yaml index 10453fe22b..590872e03e 100644 --- a/public/openapi/components/schemas/TopicObject.yaml +++ b/public/openapi/components/schemas/TopicObject.yaml @@ -1,162 +1,86 @@ TopicObject: - type: object - properties: - tid: - type: number - description: A topic identifier - uid: - type: number - description: A user identifier - cid: - type: number - description: A category identifier - mainPid: - type: number - description: The post id of the first post in this topic (also called the - "original post") - title: - type: string - slug: - type: string - timestamp: - type: number - lastposttime: - type: number - postcount: - type: number - viewcount: - type: number - postercount: - type: number - teaserPid: - oneOf: - - type: number - - type: string - nullable: true - upvotes: - type: number - downvotes: - type: number - deleted: - type: number - locked: - type: number - pinned: - type: number - description: Whether or not this particular topic is pinned to the top of the - category - deleterUid: - type: number - titleRaw: - type: string - timestampISO: - type: string - description: An ISO 8601 formatted date string (complementing `timestamp`) - lastposttimeISO: - type: string - votes: - type: number - category: - type: object + allOf: + - type: object properties: - cid: - type: number - description: A category identifier - name: - type: string - slug: - type: string - icon: - type: string - backgroundImage: - nullable: true - type: string - imageClass: - nullable: true - type: string - bgColor: - type: string - color: - type: string - disabled: - type: number - user: - type: object - properties: - uid: - type: number - description: A user identifier - username: - type: string - description: A friendly name for a given user account - displayname: - type: string - description: This is either username or fullname depending on forum and user settings - fullname: - type: string - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - reputation: - type: number - postcount: - type: number - picture: - type: string - nullable: true - signature: - type: string - nullable: true - banned: - type: number - status: - type: string - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users without - an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's auto-generated - icon - example: "#f44336" - banned_until_readable: - type: string - required: - - uid - - username - - userslug - - reputation - - postcount - - picture - - signature - - banned - - status - - icon:text - - icon:bgColor - - banned_until_readable - teaser: - type: object - properties: - pid: - type: number - uid: - type: number - description: A user identifier - timestamp: - type: number tid: type: number description: A topic identifier - content: + uid: + type: number + description: A user identifier + cid: + type: number + description: A category identifier + mainPid: + type: number + description: The post id of the first post in this topic (also called the + "original post") + title: + type: string + slug: + type: string + timestamp: + type: number + lastposttime: + type: number + postcount: + type: number + viewcount: + type: number + postercount: + type: number + teaserPid: + oneOf: + - type: number + - type: string + nullable: true + upvotes: + type: number + downvotes: + type: number + deleted: + type: number + locked: + type: number + pinned: + type: number + description: Whether or not this particular topic is pinned to the top of the + category + deleterUid: + type: number + titleRaw: type: string timestampISO: type: string description: An ISO 8601 formatted date string (complementing `timestamp`) + lastposttimeISO: + type: string + votes: + type: number + category: + type: object + properties: + cid: + type: number + description: A category identifier + name: + type: string + slug: + type: string + icon: + type: string + backgroundImage: + nullable: true + type: string + imageClass: + nullable: true + type: string + bgColor: + type: string + color: + type: string + disabled: + type: number user: type: object properties: @@ -166,93 +90,145 @@ TopicObject: username: type: string description: A friendly name for a given user account + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + fullname: + type: string userslug: type: string description: An URL-safe variant of the username (i.e. lower-cased, spaces removed, etc.) + reputation: + type: number + postcount: + type: number picture: + type: string nullable: true + signature: + type: string + nullable: true + banned: + type: number + status: type: string icon:text: type: string description: A single-letter representation of a username. This is used in the - auto-generated icon given to users - without an avatar + auto-generated icon given to users without + an avatar icon:bgColor: type: string description: A six-character hexadecimal colour code assigned to the user. This value is used in conjunction with - `icon:text` for the user's - auto-generated icon + `icon:text` for the user's auto-generated + icon example: "#f44336" + banned_until_readable: + type: string + required: + - uid + - username + - userslug + - reputation + - postcount + - picture + - signature + - banned + - status + - icon:text + - icon:bgColor + - banned_until_readable + teaser: + type: object + properties: + pid: + type: number + uid: + type: number + description: A user identifier + timestamp: + type: number + tid: + type: number + description: A topic identifier + content: + type: string + timestampISO: + type: string + description: An ISO 8601 formatted date string (complementing `timestamp`) + user: + type: object + properties: + uid: + type: number + description: A user identifier + username: + type: string + description: A friendly name for a given user account + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + picture: + nullable: true + type: string + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users + without an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's + auto-generated icon + example: "#f44336" + index: + type: number + nullable: true + tags: + type: array + items: + type: object + properties: + value: + type: string + valueEscaped: + type: string + color: + type: string + bgColor: + type: string + score: + type: number + isOwner: + type: boolean + ignored: + type: boolean + unread: + type: boolean + bookmark: + nullable: true + type: number + unreplied: + type: boolean + icons: + type: array + items: + type: string + description: HTML injected into the theme index: type: number - nullable: true - tags: - type: array - items: - type: object - properties: - value: - type: string - valueEscaped: - type: string - color: - type: string - bgColor: - type: string - score: - type: number - isOwner: - type: boolean - ignored: - type: boolean - unread: - type: boolean - bookmark: - nullable: true - type: number - unreplied: - type: boolean - icons: - type: array - items: - type: string - description: HTML injected into the theme - index: - type: number - thumb: - type: string - required: - - tid - - uid - - cid - - mainPid - - title - - slug - - timestamp - - lastposttime - - postcount - - viewcount - - teaserPid - - upvotes - - downvotes - - deleted - - locked - - pinned - - deleterUid - - titleRaw - - timestampISO - - lastposttimeISO - - votes - - category - - user - - teaser - - tags - - isOwner - - ignored - - unread - - bookmark - - unreplied - - icons - - index \ No newline at end of file + - type: object + description: Optional properties that may or may not be present (except for `tid`, which is always present, and is only here as a hack to pass validation) + properties: + tid: + type: number + description: A topic identifier + thumb: + type: string + required: + - tid \ No newline at end of file diff --git a/public/openapi/read/topic/topic_id.yaml b/public/openapi/read/topic/topic_id.yaml index c55c6888cd..129aab5927 100644 --- a/public/openapi/read/topic/topic_id.yaml +++ b/public/openapi/read/topic/topic_id.yaml @@ -403,6 +403,17 @@ get: type: number loggedInUser: $ref: ../../components/schemas/UserObject.yaml#/UserObject + - type: object + description: Optional properties that may or may not be present (except for `tid`, which is always present, and is only here as a hack to pass validation) + properties: + tid: + type: number + description: A topic identifier + thumb: + type: string + description: An uploaded topic thumbnail + required: + - tid - $ref: ../../components/schemas/Pagination.yaml#/Pagination - $ref: ../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file