openapi: 3.0.0
info:
  title: showbiz-user
  version: '1.0'
  description: Showbiz User
  contact:
    name: 井上佑太
    url: 'https://github.com/YutaInoueCommudePH'
    email: yuta_inoue@commude.co.jp
  license:
    name: Apache 2.0
    url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
servers:
  - url: 'http://showbiz-admin.commude-vietnam.work/api/user'
  # - url: 'http://localhost:8081/api/v1'
    description: Local
tags:
  - name: General
    description: General
  - name: Materials
    description: Materials
  - name: Me
    description: Me
  - name: Mypage
    description: Mypage
  - name: News
    description: News
  - name: Parts
    description: Parts
  - name: Projects
    description: Projects
  - name: User
    description: User
  - name: Works
    description: Works
  - name: Mix
    description: Mix
  - name: Tags
    description: Tags
paths:
  /most:
    get:
      summary: Top Screen
      tags:
        - General
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                    description: trueを返す
                  data:
                    type: object
                    properties:
                      main_display_project_list:
                        type: array
                        items:
                          $ref: '#/components/schemas/DisplayProjectLarge'
                      under_display_project_list:
                        type: array
                        items:
                          $ref: '#/components/schemas/DisplayProjectRelation'
                      pickup_work:
                        type: array
                        items:
                          $ref: '#/components/schemas/DisplayWorkSmall'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      operationId: get-most
      description: Get Most API
      x-internal: false
      parameters: []
  /mypage:
    get:
      summary: Mypage
      tags:
        - Mypage
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                    description: trueを返す
                  data:
                    type: object
                    properties:
                      new_notification_list:
                        type: array
                        description: |-
                          通知一覧

                          notificationsにて
                          created_at　をDESCでソート
                          レコード２つ分を取得
                        items:
                          $ref: '#/components/schemas/Notifications'
                      news_list:
                        type: array
                        description: |
                          お知らせ一覧

                          newsにて
                          published_at　をDESCでソート
                          レコード２つ分を取得
                        items:
                          $ref: '#/components/schemas/News'
                      project_list:
                        type: array
                        description: |-
                          主催プロジェクト一覧

                          projects.user_profile_id = ログインユーザーのuser_profiles.id

                          projects.status_update_at　をDESCでソート
                          レコード3つ分を取得
                        items:
                          $ref: '#/components/schemas/MypageProject'
                      work_list:
                        type: array
                        description: |-
                          投稿作品一覧

                          works.user_profile_id = ログインユーザーのuser_profiles.id

                          works.status_update_at　をDESCでソート
                          レコード3つ分を取得
                        items:
                          $ref: '#/components/schemas/MypageWork'
                      material_list:
                        type: array
                        description: |-
                          投稿素材一覧

                          materials.user_profile_id = ログインユーザーのuser_profiles.id

                          materials.status_update_at　をDESCでソート
                          レコード3つ分を取得
                        items:
                          $ref: '#/components/schemas/MypageMaterial'
                      data:
                        type: object
                        properties:
                          total_sales:
                            type: number
                            description: |-
                              累計売上

                              保留
                              TODOのコメントありで１０００など固定値を返しておいてください
                          project_num:
                            type: number
                            description: >
                              主催プロジェクト数


                              projects.user_profile_id =
                              ログインユーザーのuser_profile.id

                              でヒットするプロジェクトの総数
                          work_num:
                            type: number
                            description: |-
                              投稿作品総数

                              works.user_profile_id = ログインユーザーのuser_profile.id
                              でヒットする作品の総数
                          material_num:
                            type: number
                            description: >-
                              投稿作品数


                              materials.user_profile_id =
                              ログインユーザーのuser_profile.id

                              でヒットする素材の総数
                          mix_suggestion_num:
                            type: number
                            description: >-
                              提案ミックス数


                              mix_suggestions.user_profile_id =
                              ログインユーザーのuser_profile.id

                              でヒットするミックス提案の総数
                          favorite_num:
                            type: number
                            description: |-
                              お気に入り数

                              favorite.favorites_table
                          follow_num:
                            type: number
                            description: |-
                              フォロー数

                              user_follower
                          follower_num:
                            type: number
                            description: |-
                              フォロワー数

                              user_follower
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      operationId: get-mypage
      description: |-
        マイページ情報取得

        ログイン情報からユーザーに紐づく情報を取得する
      x-internal: false
      parameters: []
      security:
        - access_token: []
    parameters: []
  /mypage/project:
    get:
      summary: Mypage Projects
      tags:
        - Mypage
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/Pagination'
                  - type: object
                    properties:
                      data:
                        type: array
                        items:
                          $ref: '#/components/schemas/MypageProjectList'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      operationId: get-mypage-projects
      description: |-
        主催プロジェクト一覧

        10件ごと取得する

        ログイン情報からユーザーに紐づく情報を取得する
      x-internal: false
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/status'
        - $ref: '#/components/parameters/parts'
        - $ref: '#/components/parameters/search_tag_txt'
        - $ref: '#/components/parameters/sort_type_up_down'
      security:
        - access_token: []
    parameters: []
  '/mypage/work/{work}':
    get:
      summary: Mypage Works Detail
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      work_detail:
                        $ref: '#/components/schemas/MypageWorkDetail'
                      source_material_relation:
                        type: array
                        description: 元素材のリレーション
                        items:
                          $ref: '#/components/schemas/SourceMaterialRelation'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '404':
          $ref: '#/components/responses/404-Not-Found'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      operationId: get-mypage-works-detail
      description: |-
        投稿作品詳細

        ユーザーが投稿した作品である必要がある
        works.user_profile_id = ログインユーザーのuser_profiles.id
        上記となっていない場合、400エラー

        ログイン情報からユーザーに紐づく情報を取得する
      x-internal: false
      parameters: []
      security:
        - access_token: []
      tags:
        - Mypage
    parameters:
      - $ref: '#/components/parameters/work'
    post:
      summary: Works Edit
      tags:
        - User
      operationId: post-mypage-work-work
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      project_id:
                        type: string
      description: |-
        　作品再申請画面

        ユーザーが投稿した作品である必要がある
        works.user_profile_id = ログインユーザーのuser_profiles.id
        上記となっていない場合、400エラー

        ログイン情報からユーザーに紐づく情報を取得する
      security:
        - access_token: []
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: |-
                    プロジェクトタイトル 下記に登録

                    projects.title

                    core_materials.title
                thumbnail:
                  type: string
                  description: |-
                    プロジェクトのサムネイル

                    spatieで下記に登録

                    projects.thumbnail

                    core_materials.thumbnail
                description:
                  type: string
                  description: |-
                    プロジェクト説明文

                    projects.descriptionに登録
                terms_description:
                  type: string
                  description: |-
                    条件・ルール

                    projects.terms_descriptionに登録
                application_end_at:
                  type: string
                  description: |-
                    募集終了日

                    projects.application_end_at
                download_material_list:
                  type: array
                  items:
                    type: object
                    properties:
                      part_id:
                        type: integer
                        description: parts.id 選択したパートのIDを入力する
                      file_url:
                        type: string
                        description: >-
                          S3やFlettyにダウンロード素材をSDKやAPI経由でアップロードした際、レスポンスとして帰ってくるurlを入力する
                preview_list:
                  type: array
                  items:
                    type: object
                    properties:
                      file_url:
                        type: string
                        description: >-
                          S3やFlettyにダウンロード素材をSDKやAPI経由でアップロードした際、レスポンスとして帰ってくるurlを入力する
                'tags[]':
                  type: string
                  description: |-
                    ＃タグの登録

                    テキストのリストで受け取り、下記の処理で登録

                    1.入力されたタグがtagsに存在する?

                    2-1.存在する場合：tags.idを取得する

                    2-2.存在しない場合：tagsに新規で作成し、idを取得する

                    3.tag_core_materialでリレーションする
        description: ''
  /mypage/work:
    get:
      summary: Mypage Works
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                allOf:
                  - type: object
                    properties:
                      data:
                        type: array
                        description: |-
                          works.user_profile_id = ログインユーザーのuser_profiles.id

                          かつ検索条件にヒットする作品の一覧
                        items:
                          $ref: '#/components/schemas/MypageWork'
                  - $ref: '#/components/schemas/Pagination'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      operationId: get-mypage-works
      description: |-
        投稿作品一覧

        10件ごと取得する

        ログイン情報からユーザーに紐づく情報を取得する
      x-internal: false
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/status'
        - $ref: '#/components/parameters/search_tag_txt'
        - $ref: '#/components/parameters/sort_type_up_down'
      security:
        - access_token: []
      tags:
        - Mypage
    parameters: []
  '/mypage/project/{project}':
    get:
      summary: Mypage Projects Detail
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    description: レスポンスデータ
                    properties:
                      project:
                        $ref: '#/components/schemas/MypageProjectDetail'
                      material_list:
                        type: array
                        description: |-
                          追加素材一覧

                          materials.project_id = {project}.id

                          となる素材を3つ取得
                        items:
                          $ref: '#/components/schemas/CoreDisplayMaterial'
                      work_list:
                        type: array
                        description: |-
                          作品一覧

                          works.project_id = {project}.id

                          となる作品を3つ取得
                        items:
                          $ref: '#/components/schemas/DisplayWorkSmall'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '404':
          $ref: '#/components/responses/404-Not-Found'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      operationId: get-mypage-projects-detail
      description: |-
        主催プロジェクトの詳細

        ユーザーがオーナーとなっているプロジェクトである必要がある
        projects.user_profile_id = ログインユーザーのuser_profiles.id
        上記となっていない場合、400エラー

        ログイン情報からユーザーに紐づく情報を取得する
      x-internal: false
      parameters: []
      security:
        - access_token: []
      tags:
        - Mypage
    parameters:
      - $ref: '#/components/parameters/project'
    post:
      summary: Project Edit
      tags:
        - User
      operationId: post-mypage-project-project
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  title:
                    type: string
                    description: |-
                      プロジェクトタイトル 下記に登録

                      projects.title

                      core_materials.title
                  thumbnail:
                    type: string
                    description: |-
                      プロジェクトのサムネイル

                      spatieで下記に登録

                      projects.thumbnail

                      core_materials.thumbnail
                    format: file
                  description:
                    type: string
                    description: |-
                      プロジェクト説明文

                      projects.descriptionに登録
                  terms_description:
                    type: string
                    description: |-
                      条件・ルール

                      projects.terms_descriptionに登録
                  application_end_at:
                    type: string
                    description: |-
                      募集終了日

                      projects.application_end_at
                  'tags[]':
                    type: string
                    description: |-
                      ＃タグの登録

                      テキストのリストで受け取り、下記の処理で登録

                      1.入力されたタグがtagsに存在する?

                      2-1.存在する場合：tags.idを取得する

                      2-2.存在しない場合：tagsに新規で作成し、idを取得する

                      3.tag_core_materialでリレーションする
                  download_material_list:
                    type: array
                    description: |-
                      ダウンロード素材の一覧

                      download_contents
                    items:
                      type: object
                      properties:
                        part_id:
                          type: integer
                          description: parts.id 選択したパートのIDを入力する
                        file_url:
                          type: string
                          description: >-
                            S3やFlettyにダウンロード素材をSDKやAPI経由でアップロードした際、レスポンスとして帰ってくるurlを入力する
                  preview_list:
                    type: array
                    description: プレビュー素材の一覧
                    items:
                      type: object
                      properties:
                        file_url:
                          type: string
                          description: >-
                            S3やFlettyにダウンロード素材をSDKやAPI経由でアップロードした際、レスポンスとして帰ってくるurlを入力する
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      description: |-
        プロジェクト再申請画面

        ユーザーがオーナーとなっているプロジェクトである必要がある
        projects.user_profile_id = ログインユーザーのuser_profiles.id
        上記となっていない場合、400エラー

        ログイン情報からユーザーに紐づく情報を取得する
      security:
        - access_token: []
  '/mypage/work/{work}/youtube':
    parameters:
      - name: work
        in: path
        required: true
        schema:
          type: string
          example: '1'
        description: works.id 存在しなかった場合、404エラー
    post:
      summary: Register Youtube Url
      operationId: post-youtube-url
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                    description: trueを返す
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      description: >-
        公開youtube URL登録


        入力値のwork_idを元にworksを検索

        works.user_profile_id = ログイン中のユーザー

        works.status = 公開

        works.youtube_status = なし or URL不正

        の時、登録可能


        下記youtube apiで情報取得

        https://www.googleapis.com/youtube/v3/videos?key={$key}&id={$videoID}&part=snippet,status,statistics&fields=items(id,snippet/title,snippet/channelTitle,statistics/viewCount,statistics/likeCount,statistics/commentCount,status/uploadStatus),pageInfo


        登録時、youtube_urlからyoutube idを取り出し、

        works.youtube_idに登録する


        登録後、youtube_idを使用し、youtube apiが正常に動作するかチェックする

        正常に動作した場合、

        works.is_youtube_api = true

        youtube_title = $promiseResponse['items'][0]['snippet']['title']

        youtube_ch_name =
        $promiseResponse['items'][0]['snippet']['channelTitle']

        youtube_ch_fav = $promiseResponse['items'][0]['statistics']['likeCount']

        youtube_ch_comment_num =
        $promiseResponse['items'][0]['statistics']['commentCount']

        youtube_total_views =
        $promiseResponse['items'][0]['statistics']['viewCount']

        にする


        登録後、

        youtube_status = URL申請中

        status_update_atを現在の日付

        で更新する
      security:
        - access_token: []
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                youtube_url:
                  type: string
                  description: |-
                    入力されたyoutube urlのテキスト

                    works.youtube_urlに登録する
                work_id:
                  type: number
                  description: works.id
        description: ''
      tags:
        - Mypage
  '/mypage/project/{project}/work':
    get:
      summary: Mypage Project Work List
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                allOf:
                  - type: object
                    properties:
                      data:
                        type: array
                        description: |-
                          入力値のプロジェクトIDに紐づく作品を取得する

                          {project} = works.project_id

                          statusが入力されている場合、
                          works.statusで検索する
                        items:
                          $ref: '#/components/schemas/MypageWorkList'
                  - $ref: '#/components/schemas/Pagination'
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '404':
          $ref: '#/components/responses/404-Not-Found'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      operationId: get-mypage-projects-work-list
      description: |-
        主催プロジェクト内作品一覧

        ユーザーがオーナーとなっているプロジェクトである必要がある
        projects.user_profile_id = ログインユーザーのuser_profiles.id
        上記となっていない場合、400エラー

        ログイン情報からユーザーがオーナーとなっているプロジェクトに紐づく作品を取得する

        10件ごとに取得

        取得条件：
        works.status = 1

        works.status_update_at をDESCでソート
      x-internal: false
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/status_selector'
      security:
        - access_token: []
      tags:
        - Mypage
    parameters:
      - $ref: '#/components/parameters/project'
  '/mypage/project/{project}/work/{work}':
    get:
      summary: Mypage Project Work Detail
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      work_detail:
                        $ref: '#/components/schemas/WorkDetail'
                      source_material_relation:
                        $ref: '#/components/schemas/SourceMaterialRelation'
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '404':
          $ref: '#/components/responses/404-Not-Found'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      operationId: get-mypage-projects-work-detail
      description: |-
        主催プロジェクト内作品詳細

        ユーザーがオーナーとなっているプロジェクトである必要がある
        projects.user_profile_id = ログインユーザーのuser_profiles.id

        また、作品がプロジェクトに紐づいている必要がある
        {project} = {work}.project_id
        上記となっていない場合、400エラー

        ログイン情報からユーザーがオーナーとなっているプロジェクトに紐づく作品を取得する

        取得条件：
        works.status = 1
      x-internal: false
      parameters: []
      security:
        - access_token: []
      tags:
        - Mypage
    parameters:
      - $ref: '#/components/parameters/project'
      - $ref: '#/components/parameters/work'
  '/mypage/project/{project}/material':
    get:
      summary: Mypage Project Material List
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                allOf:
                  - type: object
                    properties:
                      data:
                        type: array
                        description: |-
                          入力値のプロジェクトIDに紐づく作品を取得する

                          {project} = materials.project_id

                          statusが入力されている場合、
                          works.statusで検索する
                        items:
                          $ref: '#/components/schemas/MypageMaterialList'
                  - $ref: '#/components/schemas/Pagination'
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '404':
          $ref: '#/components/responses/404-Not-Found'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      operationId: get-mypage-projects-material-list
      description: |-
        主催プロジェクト内素材一覧

        ユーザーがオーナーとなっているプロジェクトである必要がある
        projects.user_profile_id = ログインユーザーのuser_profiles.id
        上記となっていない場合、400エラー

        ログイン情報からユーザーがオーナーとなっているプロジェクトに紐づく素材を取得する

        10件ごとに取得

        取得条件：
        materials.status = 1

        materials.status_update_at をDESCでソート
      x-internal: false
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/status_selector'
      security:
        - access_token: []
      tags:
        - Mypage
    parameters:
      - $ref: '#/components/parameters/project'
  '/mypage/project/{project}/material/{material}':
    get:
      summary: Mypage Project Material Detail
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      material_detail:
                        type: string
                      work_relation:
                        type: string
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '404':
          $ref: '#/components/responses/404-Not-Found'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      operationId: get-mypage-projects-material-detail
      description: |-
        主催プロジェクト内作品詳細

        ユーザーがオーナーとなっているプロジェクトである必要がある
        projects.user_profile_id = ログインユーザーのuser_profiles.id

        また、作品がプロジェクトに紐づいている必要がある
        {project} = {material}.project_id
        上記となっていない場合、400エラー

        ログイン情報からユーザーがオーナーとなっているプロジェクトに紐づく作品を取得する

        取得条件：
        materials.status = 1
      x-internal: false
      parameters: []
      security:
        - access_token: []
      tags:
        - Mypage
    parameters:
      - $ref: '#/components/parameters/project'
      - $ref: '#/components/parameters/material'
  '/mypage/pickup/{material}':
    get:
      summary: Mypage Pickup Materials
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    allOf:
                      - properties:
                          is_pickup:
                            type: boolean
                            description: materials.is_pickupを返す
                    type: object
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '404':
          $ref: '#/components/responses/404-Not-Found'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      operationId: get-mypage-pickup-materials
      description: |-
        PICK UP素材の登録・解除

        ログイン情報からユーザーがオーナーとなっているプロジェクトの素材のみ登録・解除可能

        {material}に紐づく素材のis_pickupをtrue or falseで登録する

        materials.is_pickup = trueの場合：

        materials.is_pickup = false で登録

        materials.is_pickup = falseの場合：

        materials.is_pickup = true で登録
      x-internal: false
      parameters: []
      security:
        - access_token: []
      tags:
        - Mypage
    parameters:
      - $ref: '#/components/parameters/material'
  /me:
    post:
      summary: Register User
      tags:
        - User
      operationId: post-me
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties: {}
      description: Register User
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  format: email
                  example: yuta_inoue@commude.co.jp
                password:
                  type: string
                  format: password
                has_office:
                  type: boolean
                company:
                  type: string
                  example: Commude Inc.
                description:
                  type: string
                twitter_url:
                  type: string
                  format: url
                  example: 'https://twitter.com/sampleuser'
                instagram_url:
                  type: string
                  format: url
                  example: 'https://instagram.com/sampleuser'
                facebook_url:
                  type: string
                  format: url
                  example: 'https://facebook.com/sampleuser'
                other_url:
                  type: string
                  format: url
                  example: 'https://www.other.com/abcd'
              required:
                - email
                - password
                - has_office
            examples: {}
        description: ''
    delete:
      summary: Delete User
      tags:
        - User
      operationId: delete-me
      responses:
        '204':
          description: No Content
      description: |-
        退会処理

        具体的にどうするか？まだ決まっていない
    get:
      summary: Get My Profile
      operationId: get-me
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
      description: Get My Profile API
      tags:
        - Me
  /me/bank_setting:
    post:
      summary: Save Bank Setting
      operationId: post-me-bank_setting
      responses:
        '201':
          description: Created
      description: Save bank settings
      requestBody:
        content:
          application/json:
            schema:
              type: object
              x-examples:
                example-1:
                  account_name: イノウエユウタ
                  deposit_type: NORMAL
                  banking_facility_name: test
                  banking_facility_code: '2134'
                  branch_name: adas
                  branch_code: '123'
                  account_code: '123123'
              properties:
                account_name:
                  type: string
                deposit_type:
                  type: string
                  enum:
                    - NORMAL
                    - CHECKING
                banking_facility_name:
                  type: string
                banking_facility_code:
                  type: string
                branch_name:
                  type: string
                branch_code:
                  type: string
                account_code:
                  type: string
              required:
                - account_name
                - deposit_type
                - banking_facility_name
                - banking_facility_code
                - branch_name
                - branch_code
                - account_code
            examples:
              example-1:
                value:
                  account_name: イノウエユウタ
                  deposit_type: NORMAL
                  banking_facility_name: test
                  banking_facility_code: '2134'
                  branch_name: adas
                  branch_code: '123'
                  account_code: '123123'
      tags:
        - Me
  /search:
    get:
      summary: Search Contents
      operationId: get-search
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/parts'
        - $ref: '#/components/parameters/tags'
        - $ref: '#/components/parameters/search_type'
        - schema:
            type: string
          in: query
          name: search_text
          description: 入力なしの場合、search_typeに従い全検索
        - $ref: '#/components/parameters/sort_type'
      description: |
        コンテンツ検索

        それぞれのidは一つのみnullではなく値が入る
        例)
        プロジェクトの場合 project_id = 1、他のID=null
      security:
        - access_token: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pagination'
                # type: object
                # properties:
                #   status:
                #     type: boolean
                #     description: trueを返す
                #   data:
                #     allOf:
                #       - $ref: '#/components/schemas/Pagination'
                #       - type: object
                #         properties:
                #           results:
                #             type: array
                #             items:
                #               $ref: '#/components/schemas/SearchResponce'
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      tags:
        - General
  '/user/{user}/follow':
    parameters:
      - $ref: '#/components/parameters/user'
    post:
      summary: Follow User
      tags:
        - User
      operationId: post-user-follow
      responses:
        '201':
          description: Created
      description: Follow USer
    delete:
      summary: Unfollow User
      tags:
        - User
      operationId: delete-user-follow
      description: Unfollow User
      responses:
        '204':
          description: No Content
  /projects:
    parameters: []
    post:
      summary: Create Project
      operationId: post-projects
      description: |-
        プロジェクトを作成

        サムネイルのみfileとしてリクエストする
        ダウンロード可能データとプレビューは先にAPIでS3に格納しておく

        Create Project

        Medias will be stored after creating
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                title:
                  type: string
                  description: |-
                    プロジェクトタイトル 下記に登録

                    projects.title

                    core_materials.title
                thumbnail:
                  type: string
                  description: |-
                    プロジェクトのサムネイル

                    spatieで下記に登録

                    projects.thumbnail

                    core_materials.thumbnail
                  format: file
                description:
                  type: string
                  description: |-
                    プロジェクト説明文

                    projects.descriptionに登録
                terms_description:
                  type: string
                  description: |-
                    条件・ルール

                    projects.terms_descriptionに登録
                application_end_at:
                  type: string
                  description: |-
                    募集終了日

                    projects.application_end_at
                'tags[]':
                  type: array
                  description: |-
                    ＃タグの登録

                    テキストのリストで受け取り、下記の処理で登録

                    1.入力されたタグがtagsに存在する?

                    2-1.存在する場合：tags.idを取得する

                    2-2.存在しない場合：tagsに新規で作成し、idを取得する

                    3.tag_core_materialでリレーションする

                    同じ名前のタグを複数登録しようとした場合、最初のタグのみ登録するようにする
                    例）下記の内容でタグと登録してきたとする
                    「ロック」「ロック」「ロック」「ポップ」
                    この場合、「ロック」「ポップ」で登録する
                  items:
                    type: string
                download_material_list:
                  type: array
                  description: |-
                    ダウンロード素材の一覧

                    download_contents
                  items:
                    type: object
                    properties:
                      part_id:
                        type: integer
                        description: parts.id 選択したパートのIDを入力する
                      file_url:
                        type: string
                        description: >-
                          S3やFlettyにダウンロード素材をSDKやAPI経由でアップロードした際、レスポンスとして帰ってくるurlを入力する
                preview_list:
                  type: array
                  description: プレビュー素材の一覧
                  items:
                    type: object
                    properties:
                      file_url:
                        type: string
                        description: >-
                          S3やFlettyにダウンロード素材をSDKやAPI経由でアップロードした際、レスポンスとして帰ってくるurlを入力する
        description: ''
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                    description: return true
                  data:
                    type: object
                    properties:
                      project_id:
                        type: integer
              examples: {}
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      security:
        - access_token: []
      tags:
        - Projects
  '/projects/{project}':
    parameters:
      - $ref: '#/components/parameters/project'
    get:
      summary: Get Project Detail
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    allOf:
                      - description: プロジェクト詳細
                        properties:
                          project_detail:
                            $ref: '#/components/schemas/ProjectDetail'
                      - properties:
                          material_list:
                            type: array
                            description: >-
                              materials.project_id =対象プロジェクトIDの素材が表示される
                              materials.status = 1 (公開中)
                            items:
                              $ref: >-
                                #/components/schemas/DisplayMaterialMaterialRelation
                          work_list:
                            type: array
                            description: >-
                              works.project_id = 対象プロジェクトIDの作品が表示される
                              works.status = 1 (公開中)
                            items:
                              $ref: '#/components/schemas/DisplayWorkSmall'
                          mix_list:
                            type: array
                            description: >-
                              mix_recruitments.project_id = 対象プロジェクトID かつ
                              mix_recruitments.status = 1 (公開) となっているもの
                            items:
                              $ref: '#/components/schemas/CoreDisplayMixRecruitment'
                          recommend_project_list:
                            type: array
                            description: >-
                              tag_user_profile.user_profile_id = 対象ユーザーのID
                              上記で得られたtag_user_profileで下記をリスト化
                              tag_user_profile.tag_id


                              同じタグを持つprojectsを検索する
                            items:
                              $ref: '#/components/schemas/CoreDisplayProject'
                    type: object
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '404':
          $ref: '#/components/responses/404-Not-Found'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      operationId: get-projects-project
      description: |-
        プロジェクト詳細の取得

        取得条件：
        projects.status = 1
      parameters: []
      security:
        - access_token: []
      tags:
        - Projects
  '/projects/{project}/overview':
    parameters:
      - $ref: '#/components/parameters/project'
    get:
      summary: Get Project Overview
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      project:
                        $ref: '#/components/schemas/DisplayProjectLarge'
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '404':
          $ref: '#/components/responses/404-Not-Found'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      operationId: get-projects-project-overview
      description: |-
        プロジェクトの概要を取得するためのAPI

        取得条件：
        projects.status = 1
      parameters: []
      security:
        - access_token: []
      tags:
        - Projects
  '/projects/{project}/like':
    parameters:
      - $ref: '#/components/parameters/project'
    post:
      summary: Like Project
      operationId: post-projects-like
      description: Like Post API
      responses:
        '201':
          description: Created
      tags:
        - Projects
    delete:
      summary: Unlike Project
      tags:
        - User
      operationId: delete-projects-like
      description: Unlike Project
      responses:
        '204':
          description: No Content
  '/projects/{project}/work':
    post:
      summary: Project Works List
      operationId: post-projects-works
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                allOf:
                  - type: object
                    properties:
                      data:
                        type: array
                        items:
                          $ref: '#/components/schemas/DisplayWorkSmall'
                  - $ref: '#/components/schemas/Pagination'
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      description: |-
        プロジェクトより生まれた作品一覧にて使用するAPI
        入力内容がない場合はプロジェクトに紐づく作品を全検索する

        取得条件：
        projects.status = 1
        works.status = 1
      parameters:
        - $ref: '#/components/parameters/parts'
        - $ref: '#/components/parameters/search_tag_txt'
        - $ref: '#/components/parameters/sort_type'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/per_page'
      security:
        - access_token: []
      tags:
        - Projects
    parameters:
      - $ref: '#/components/parameters/project'
  '/projects/{project}/material':
    post:
      summary: Project Materials List
      operationId: post-projects-materials
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                allOf:
                  - type: object
                    properties:
                      data:
                        type: array
                        description: プロジェクトに紐づく素材を取得
                        items:
                          $ref: '#/components/schemas/CoreDisplayMaterial'
                  - $ref: '#/components/schemas/Pagination'
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      description: |-
        プロジェクトより生まれた素材一覧にて使用するAPI
        入力内容がない場合はプロジェクトに紐づく素材を全検索する

        取得条件：
        projects.status = 1
        works.status = 1
      parameters:
        - $ref: '#/components/parameters/parts'
        - $ref: '#/components/parameters/search_tag_txt'
        - $ref: '#/components/parameters/sort_type'
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/per_page'
      security:
        - access_token: []
      tags:
        - Projects
    parameters:
      - $ref: '#/components/parameters/project'
  '/works/{work}':
    parameters:
      - $ref: '#/components/parameters/work'
    get:
      summary: Get Work Detail
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    allOf:
                      - description: 作品詳細
                        properties:
                          work_detail:
                            $ref: '#/components/schemas/WorkDetail'
                      - description: 元素材のリレーション
                        properties:
                          source_material_relation:
                            $ref: '#/components/schemas/SourceMaterialRelation'
                    type: object
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '404':
          $ref: '#/components/responses/404-Not-Found'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      operationId: get-works
      description: |-
        作品詳細の取得

        取得条件：
        works.status = 1
      parameters: []
      security:
        - access_token: []
      tags:
        - Works
  /part_list:
    parameters: []
    get:
      summary: Get Parts List
      operationId: get-part_list
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      results:
                        $ref: '#/components/schemas/PartList'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      description: パートリストの取得
      parameters: []
      security:
        - access_token: []
      tags:
        - Parts
  /step1_works:
    parameters: []
    post:
      tags:
        - User
      summary: Create Step1 Works
      operationId: post-step1_works
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                    description: 必ずtrueを返す
                  data:
                    type: object
                    properties:
                      work_id:
                        type: integer
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      description: >-
        作品を作成


        パラメータ：is_draftで下書き保存なのか本番登録なのか分ける


        パラメータにwork_idがなかった場合：新規登録

        パラメータにwork_idがあった場合：下書きからの登録

        　　works.id = {work_id} となるworksを更新

        　　パラーメータmusic_file、jacket_file、thumbnail_file、lyrics_file

        　　はworksに登録されている情報があったらnullでも問題ない。登録されている情報がなかったら必須項目としてバリデーションをかける

        　　

        transactionを使い、途中で登録に失敗した際、データを戻すようにする


        based_on_core_material_idにて元素材に素材が使用されていた場合は作品と素材のリレーションを

        material_work

        に登録する　※新規登録のみ


        works.project_idに登録するプロジェクトIDですが、

        based_on_core_material_idに紐づくcore_materialsに紐づくprojectsやmaterialsのproject_id

        を登録する
      security:
        - access_token: []
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                work_id:
                  type: integer
                  description: |-
                    works.id

                    もし、下書きからの登録の場合はidが入る

                    新規登録の場合はnullとなる
                  nullable: true
                based_on_core_material_id:
                  type: string
                  description: |-
                    work_id != nullだった場合、null

                    元になったプロジェクト・素材・ミックス提案の
                    core_materials.idを入力

                    紐づくcore_materialsのプロジェクトや素材、ミックス提案が「公開」状態であることをチェックする

                    その後、下記で登録
                    works.project_id = {上記core_materials}.joining_project_id
                  nullable: true
                title:
                  type: string
                  description: works.title
                title_kana:
                  type: string
                  description: works.title_kana
                music_file:
                  type: string
                  description: |-
                    wavファイルもしくは動画ファイルが送信される
                    動画ファイルだった場合、コーデックのバリデーションをする

                    バリデーションが通ったらspatieで
                    works.preview_urlに登録する

                    また、ファイル形式がwavかどうかによってmusic_urlの登録内容を変える
                    wavだった場合：works.music_url = works.preview_url
                    wav以外だった場合：works.music_url = null
                  format: file
                  nullable: true
                jacket_file:
                  type: string
                  format: file
                  description: |-
                    バリデーションが通ったらspatieで
                    works.jacket_urlに登録する
                thumbnail_file:
                  type: string
                  format: file
                  description: |-
                    バリデーションが通ったらspatieで
                    works.thumbnailに登録する
                lyrics_file:
                  type: string
                  format: file
                  description: |-
                    バリデーションが通ったらspatieで
                    works.lyrics_urlに登録する
                'tag[]':
                  type: array
                  description: |-
                    ＃タグの登録

                    テキストのリストで受け取り、下記の処理で登録

                    1.入力されたタグがtagsに存在する?

                    2-1.存在する場合：tags.idを取得する

                    2-2.存在しない場合：tagsに新規で作成し、idを取得する

                    3.tag_core_materialでリレーションする

                    同じ名前のタグを複数登録しようとした場合、最初のタグのみ登録するようにする
                    例）下記の内容でタグと登録してきたとする
                    「ロック」「ロック」「ロック」「ポップ」
                    この場合、「ロック」「ポップ」で登録する
                  items:
                    type: string
                description:
                  type: string
                  description: works.description
                'part[]':
                  type: array
                  description: >-
                    選択したパートのIDリスト


                    下記に登録する

                    core_materials.core_materials_json

                    core_materials.part_id_list


                    登録方法

                    https://docs.google.com/presentation/d/1G450zL_5WkgAc8U6x3aRp1O89vxr9VLwgBYvij87cmk/edit#slide=id.g12fdcab6239_1_161
                  items:
                    type: number
                is_draft:
                  type: boolean
                  description: |-
                    下書き保存のフラグ

                    trueだった場合、下書き保存で登録する
                    works.registration_status = step1_draft

                    falseだった場合、下記で登録する
                    works.registration_status = step1_comp
        description: ''
    get:
      summary: Get Step1 Works Data
      operationId: get-step1_works
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      source_material_relation:
                        $ref: '#/components/schemas/SourceMaterialRelation'
                      used_part_list:
                        $ref: '#/components/schemas/UsedPartList'
                      user_profile:
                        $ref: '#/components/schemas/UserProfileUseRegister'
                      part_list:
                        $ref: '#/components/schemas/PartList'
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      description: |-
        作品登録画面
        作品登録に必要な情報を取得する

        パラメータとして
        core_material_id = {元素材のcore_materials.id}
        を受け取り、元素材の一覧をレスポンスとして返す

        core_material_idは下記の条件を満たしている必要がある
        ・プロジェクト、素材、ミックス提案のcore_materialsであること
        ・プロジェクトのステータスが「募集中」であること
        上記を満たしていない場合、400エラー
      parameters:
        - schema:
            type: number
          in: query
          name: core_material_id
          description: 元素材として使用した素材やミックス提案、プロジェクトのcore_materials.idを入力する
      security:
        - access_token: []
      tags:
        - Works
  /draft_works:
    parameters: []
    get:
      summary: Get Draft works List
      operationId: get-draft_works
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      draft_list:
                        type: array
                        description: 下書きの作品一覧
                        items:
                          type: object
                          properties:
                            works_id:
                              type: integer
                              description: works.id
                            step_status:
                              type: string
                              description: |-
                                step1下書きかstep2の下書きか

                                works.registration_statusを返す
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      description: |
        下書き一覧を取得する

        下記に紐づくworksの情報を取得する
        works.user_profile_id = {ログインユーザーのID}
        works.registration_status = step1_draft or step2_draft
      parameters:
        - schema:
            type: number
          in: query
          name: core_material_id
          description: 元素材として使用した素材やミックス提案、プロジェクトのcore_materials.idを入力する
      security:
        - access_token: []
      tags:
        - Works
  '/step1_draft_works/{work}':
    parameters:
      - name: work
        in: path
        required: true
        schema:
          type: string
          example: '1'
        description: works.id 存在しなかった場合、404エラー
    get:
      summary: Get Step1 Draft Works Data
      operationId: get-step1_draft_works
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    allOf:
                      - properties:
                          works:
                            $ref: '#/components/schemas/Step1WorkRegister'
                      - description: ログインユーザーの情報
                        properties:
                          user_profile:
                            $ref: '#/components/schemas/UserProfileUseRegister'
                          used_part_list:
                            $ref: '#/components/schemas/UsedPartList'
                          source_material_relation:
                            $ref: '#/components/schemas/SourceMaterialRelation'
                          part_list:
                            $ref: '#/components/schemas/PartList'
                    type: object
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      description: |
        作品登録画面
        下書きから登録を再開する時に使用するAPI

        パラメータのworkに紐づくworksは下記を満たしている必要がある
        works.user_profile_id = {ログインユーザーのID}
        works.registration_status = step1_draft
        上記を満たしていない場合、400エラーを返す

        また、プロジェクトのステータスが「募集中」である必要がある
        もし、「募集中」でない場合、400エラーを返す
      parameters: []
      security:
        - access_token: []
      tags:
        - Works
    delete:
      tags:
        - User
      summary: Delete Step1 Draft Works
      operationId: delete-step1_draft_works
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                    description: trueを返す
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          description: Unauthorized
        '500':
          $ref: '#/components/responses/500-Server-Error'
      description: |-
        作品申請の下書きの削除

        パラメータのworkに紐づくworksが下記の条件となっていることをチェックする
        works.user_profile_id = {ログインユーザーのuser_profile.id}
        works.registration_status = step1_draft
        上記条件に当てはまっていない場合は400エラーを返す

        対象のworksに紐づく下記データを削除する
        works
        core_materials
        material_work
      security:
        - access_token: []
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                work_id:
                  type: number
                  description: |-
                    works.id
                    削除対象の下書き保存の作品IDを入力する
  '/step2_works/{work}':
    parameters:
      - $ref: '#/components/parameters/work'
    post:
      tags:
        - User
      summary: Create Step2 Works
      operationId: post-step2_works
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                    description: 必ずtrueを返す
                  data:
                    type: object
                    properties:
                      work_id:
                        type: integer
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      description: |-
        リリース申請(step2)の登録

        transactionを使い、途中で登録に失敗した際、データを戻すようにする

        登録が無事完了したら
        works.registration_status = step2_comp
        で登録
      security:
        - access_token: []
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                music_url:
                  type: string
                  description: |-
                    works.music_url

                    works.preview_urlのデータのファイル形式がwav以外の場合、入力必須項目となる

                    wavファイルではなかった場合、400エラー
                  format: file
                  nullable: true
                title_international:
                  type: string
                  description: works.title_international
                music_genre:
                  type: integer
                  description: works.music_genre
                is_instrumental:
                  type: boolean
                  description: works.is_instrumental
                is_violence_sexual:
                  type: boolean
                  description: works.is_violence_sexual
                description_db:
                  type: string
                  description: works.description_dbに登録
                description_international:
                  type: string
                  description: works.description_internationalに登録
                copyright_management:
                  type: integer
                  description: works.copyright_managementに登録
                release_date:
                  type: string
                  description: works.release_dateに登録
                is_cd_release:
                  type: boolean
                  description: works.is_cd_releaseに登録
                catch_copy:
                  type: string
                  description: works.catch_copyに登録
                release_description:
                  type: string
                  description: works.release_descriptionに登録
                catch_copy_en:
                  type: string
                  description: works.catch_copy_enに登録
                release_description_en:
                  type: string
                  description: works.release_description_enに登録
                artist_photo:
                  type: string
                  format: file
                  description: |-
                    spatieで
                    works.artist_photoに登録
                artist_photo_rec:
                  type: string
                  format: file
                  description: |-
                    spatieで
                    works.artist_photo_recに登録
        description: ''
    get:
      summary: Get Step2 Works
      operationId: get-step2_works
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      is_draft:
                        type: boolean
                        description: |-
                          下書きの場合true
                          つまり、
                          works.registration_status == step2_draft
                          を返す
                      is_wav_music_file:
                        type: boolean
                        description: |-
                          works.preview_urlのファイル形式がwavだったら
                          true

                          wav以外のmp4などだったら
                          false

                          を返す
                      music_url:
                        type: string
                        description: works.music_url
                      title_international:
                        type: string
                        description: works.title_international
                      music_genre:
                        type: integer
                        description: works.music_genre
                      is_instrumental:
                        type: boolean
                        description: works.is_instrumental
                      is_violence_sexual:
                        type: boolean
                        description: works.is_violence_sexual
                      description_db:
                        type: string
                        description: works.description_db
                      description_international:
                        type: string
                        description: works.description_international
                      copyright_management:
                        type: integer
                        description: works.copyright_management
                      release_date:
                        type: string
                        description: works.release_date
                      is_cd_release:
                        type: boolean
                        description: works.is_cd_release
                      catch_copy:
                        type: string
                        description: works.catch_copy
                      release_description:
                        type: string
                        description: works.release_description
                      catch_copy_en:
                        type: string
                        description: works.catch_copy_en
                      release_description_en:
                        type: string
                        description: works.release_description_en
                      artist_photo:
                        type: string
                        description: works.artist_photo
                      artist_photo_rec:
                        type: string
                        description: works.artist_photo_rec
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      description: |-
        リリース申請（STEP2）の必要な情報を取得する

        STEP1で楽曲ファイルをwav以外で登録した場合、
        STEP2でwavファイルを登録する必要がある。

        そのため、wavで登録されているかをレスポンスとして返す。

        works.id = {work}
        AND
        works.user_profile = {ログイン中のユーザーID}
        AND
        works.registration_status = step1_comp or step2_draft
        となるworksを取得する
        もし、取得できなかった場合、400エラーを返す
      security:
        - access_token: []
      tags:
        - Works
  /step2_draft_works:
    parameters: []
    delete:
      summary: Delete Step2 Draft Works
      operationId: delete-step2_draft_works
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                    description: trueを返す
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          description: Unauthorized
        '500':
          $ref: '#/components/responses/500-Server-Error'
      description: |
        リリース申請の下書きの削除

        パラメータのwork_idに紐づくworksが下記の条件となっていることをチェックする
        works.user_profile_id = {ログインユーザーのuser_profile.id}
        works.registration_status = step2_draft
        上記条件に当てはまっていない場合は400エラーを返す

        worksの下記カラムを初期状態やnullとする
        title_international
        music_genre
        is_instrumental
        is_violence_sexual
        description_db
        description_international
        copyright_management
        release_date
        is_cd_release
        catch_copy
        release_description
        catch_copy_en
        release_description_en

        下記はspatieで登録されているのでS3のデータも削除する
        artist_photo
        artist_photo_rec

        music_urlは下記条件を満たした時、spatieで登録されているS3データと一緒に削除する
        ・works.preview_urlのデータのファイル形式がwav以外の場合
      security:
        - access_token: []
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                work_id:
                  type: number
                  description: |-
                    works.id
                    削除対象の下書き保存の作品IDを入力する
      tags:
        - Works
  '/materials/{material}':
    parameters:
      - $ref: '#/components/parameters/material'
    get:
      summary: Get Material Detail
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    allOf:
                      - description: 素材詳細
                        properties:
                          material_detail:
                            $ref: '#/components/schemas/MaterialDetail'
                      - description: 元素材のリレーション
                        properties:
                          source_material_relation:
                            $ref: '#/components/schemas/SourceMaterialRelation'
                          used_material_list:
                            type: array
                            description: >-
                              素材詳細のcore_materials.based_on_core_material_id =
                              core_materials.idを取得


                              条件：

                              core_materials.is_all_display = true
                            items:
                              $ref: '#/components/schemas/PickUpMaterial'
                          mix_list:
                            type: array
                            description: >-
                              対象のcore_materials.id =
                              core_materials.based_on_core_material_id

                              かつ

                              core_materials.mix_recruitment_id != null


                              のcore_materialsに紐づくmix_recruitmentsを取得する


                              条件：

                              mix_recruitments.status = 1
                            items:
                              $ref: '#/components/schemas/CoreDisplayMixRecruitment'
                          used_work_list:
                            type: array
                            description: |-
                              materiasl.id = material_work.material_id
                              で取得できるworks

                              条件：
                              works.status = 1
                            items:
                              $ref: '#/components/schemas/DisplayWorkSmall'
                    type: object
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '404':
          $ref: '#/components/responses/404-Not-Found'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      operationId: get-materials
      description: |-
        素材詳細の取得

        取得条件：
        materials.status = 1
      parameters: []
      security:
        - access_token: []
      tags:
        - Materials
  '/user_profile/{user_profile}':
    parameters:
      - $ref: '#/components/parameters/user_profile'
    get:
      summary: Get User Profile
      tags:
        - User
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    allOf:
                      - description: ユーザー詳細
                        properties:
                          user_profile:
                            $ref: '#/components/schemas/UserProfileDetail'
                      - properties:
                          organized_project_list:
                            type: array
                            description: >-
                              主催プロジェクト一覧


                              projects.user_profile_id = user_profile(対象ユーザー)


                              もしくは


                              上記のプロジェクトを取得する


                              表示条件


                              core_materials.is_detail_display = true


                              もしくは下記条件でも可


                              core_materials.user_profile_id =
                              user_profile(対象ユーザー)


                              AND


                              core_materials.project_id != null


                              AND


                              core_materials.is_detail_display = true
                            items:
                              $ref: '#/components/schemas/CoreDisplayProject'
                          posted_material:
                            type: array
                            description: >-
                              投稿素材一覧


                              下記で取得可能なものを表示する


                              core_materials.user_profile_id =
                              user_profile(対象ユーザー)


                              AND


                              core_materials.material_id != null


                              AND


                              core_materials.is_detail_display = true
                            items:
                              $ref: '#/components/schemas/CoreDisplayMaterial'
                          posted_works:
                            type: array
                            description: >-
                              投稿作品一覧


                              下記で取得可能なものを表示する


                              core_materials.user_profile_id =
                              user_profile(対象ユーザー)


                              AND


                              core_materials.work_id != null


                              AND


                              core_materials.is_detail_display = true
                            items:
                              $ref: '#/components/schemas/DisplayWorkSmall'
                          mix_list:
                            type: array
                            description: >-
                              投稿作品一覧


                              下記で取得可能なものを表示する


                              core_materials.user_profile_id =
                              user_profile(対象ユーザー)


                              AND


                              core_materials.mix_recruitment_id != null


                              AND


                              core_materials.is_detail_display = true
                            items:
                              $ref: '#/components/schemas/MixRecruitmentSmall'
                    type: object
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '404':
          $ref: '#/components/responses/404-Not-Found'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      operationId: get-user_profile
      description: |-
        ユーザー詳細の取得

        取得条件：
        users.is_active = true
      parameters: []
      security:
        - access_token: []
  '/user_profile/{user_profile}/projects':
    parameters:
      - $ref: '#/components/parameters/user_profile'
    post:
      summary: Get Organized Project List
      tags:
        - User
      operationId: post-user_profile-user_profile-projects
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                allOf:
                  - type: object
                    properties:
                      data:
                        type: array
                        description: |-
                          下記で取得できるプロジェクトのうち、入力のparts[]とtags[]で検索する

                          core_materials.user_profile_id = user_profile(対象ユーザー)

                          AND

                          core_materials.project_id != null

                          AND

                          core_materials.is_detail_display = true
                        items:
                          $ref: '#/components/schemas/CoreDisplayProject'
                  - $ref: '#/components/schemas/Pagination'
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '404':
          $ref: '#/components/responses/404-Not-Found'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      description: |-
        主催プロジェクト一覧

        一回で12件まで取得可能
      security:
        - access_token: []
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/parts'
        - $ref: '#/components/parameters/tags'
        - $ref: '#/components/parameters/sort_type'
  '/user_profile/{user_profile}/works':
    parameters:
      - $ref: '#/components/parameters/user_profile'
    post:
      summary: Get Posted Works List
      tags:
        - User
      operationId: post-user_profile-user_profile-works
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                allOf:
                  - type: object
                    properties:
                      data:
                        type: array
                        description: |-
                          下記で取得できる作品のうち、入力のparts[]とtags[]で検索する

                          core_materials.user_profile_id = user_profile(対象ユーザー)

                          AND

                          core_materials.work_id != null

                          AND

                          core_materials.is_detail_display = true
                        items:
                          $ref: '#/components/schemas/DisplayWorkSmall'
                  - $ref: '#/components/schemas/Pagination'
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '404':
          $ref: '#/components/responses/404-Not-Found'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      description: |-
        投稿作品一覧

        一回で12件まで取得可能
      security:
        - access_token: []
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/parts'
        - $ref: '#/components/parameters/tags'
        - $ref: '#/components/parameters/sort_type'
  '/users/{user}/materials':
    parameters:
      - $ref: '#/components/parameters/user'
    get:
      summary: User's Material List
      tags:
        - User
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                allOf:
                  - type: object
                    properties:
                      data:
                        type: array
                        items:
                          $ref: '#/components/schemas/CoreDisplayMaterial'
                  - $ref: '#/components/schemas/Pagination'
      operationId: get-users-user-materials
      description: |-
        Retrieve the user's material list.

        The available search filters are status, parts and tag.

        By default, pagers are 10 per page, and sorted from latest to oldest.
      parameters:
        - $ref: '#/components/parameters/parts'
        - $ref: '#/components/parameters/sort_type_up_down'
        - $ref: '#/components/parameters/search_tag_txt'
  '/user_profile/{user_profile}/materials':
    parameters:
      - $ref: '#/components/parameters/user_profile'
    post:
      summary: Get Posted Materials List
      tags:
        - User
      operationId: post-user_profile-user_profile-materials
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                allOf:
                  - type: object
                    properties:
                      data:
                        type: array
                        description: |-
                          下記で取得できる素材のうち、入力のparts[]とtags[]で検索する

                          core_materials.user_profile_id = user_profile(対象ユーザー)

                          AND

                          core_materials.material_id != null

                          AND

                          core_materials.is_detail_display = true
                        items:
                          $ref: '#/components/schemas/CoreDisplayMaterial'
                  - $ref: '#/components/schemas/Pagination'
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '404':
          $ref: '#/components/responses/404-Not-Found'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      description: |-
        投稿素材一覧

        一回で12件まで取得可能
      security:
        - access_token: []
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/parts'
        - $ref: '#/components/parameters/tags'
        - $ref: '#/components/parameters/sort_type'
  '/user_profile/{user_profile}/mix':
    parameters:
      - $ref: '#/components/parameters/user_profile'
    post:
      summary: Get Posted Mix List
      tags:
        - User
      operationId: post-user_profile-user_profile-mix
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                allOf:
                  - type: object
                    properties:
                      data:
                        type: array
                        description: |-
                          下記で取得できるミックス募集を取得する

                          core_materials.user_profile_id = user_profile(対象ユーザー)

                          AND

                          core_materials.mix_recruitment_id != null

                          AND

                          core_materials.is_detail_display = true
                        items:
                          $ref: '#/components/schemas/MixRecruitmentSmall'
                  - $ref: '#/components/schemas/Pagination'
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '404':
          $ref: '#/components/responses/404-Not-Found'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      description: |-
        募集中のミックス/マスタリング一覧

        一回で12件まで取得可能
      security:
        - access_token: []
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/sort_type'
  '/source_materials/{material} ':
    parameters:
      - $ref: '#/components/parameters/material'
    get:
      summary: Get Source Materials
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      source_material_relation:
                        $ref: '#/components/schemas/SourceMaterialRelation'
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '404':
          $ref: '#/components/responses/404-Not-Found'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      operationId: get-source-materials
      description: |-
        素材で元素材として使用してきた素材を表示する

        取得条件：
        materials.status = 1
      parameters: []
      security:
        - access_token: []
      tags:
        - Materials
  /materials:
    parameters: []
    post:
      summary: Create Material
      operationId: post-materials
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      material_id:
                        type: integer
                        description: 作成したmaterials.idを返す
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      description: 素材追加申請
      security:
        - access_token: []
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                based_on_core_material_id:
                  type: integer
                  description: |-
                    元となった素材のID (core_materials.id)
                    元素材がなく、プロジェクトから作成した場合はプロジェクトのcore_materials.id
                title:
                  type: string
                  description: |-
                    素材タイトル
                    materials.titleとcore_materials.titleに登録
                thumbnail:
                  type: string
                  description: |-
                    素材のサムネイル
                    spatieで下記に登録
                    materials.thumbnail
                    core_materials.thumbnail
                  format: file
                description:
                  type: string
                  description: |-
                    素材説明文
                    materials.descriptionに登録
                terms_description:
                  type: string
                  description: |-
                    条件・ルール
                    materials.terms_descriptionに登録
                'tags[]':
                  type: array
                  description: |-
                    ＃タグの登録

                    テキストのリストで受け取り、下記の処理で登録

                    1.入力されたタグがtagsに存在する?

                    2-1.存在する場合：tags.idを取得する

                    2-2.存在しない場合：tagsに新規で作成し、idを取得する

                    3.tag_core_materialでリレーションする

                    同じ名前のタグを複数登録しようとした場合、最初のタグのみ登録するようにする
                    例）下記の内容でタグと登録してきたとする
                    「ロック」「ロック」「ロック」「ポップ」
                    この場合、「ロック」「ポップ」で登録する
                  items:
                    type: string
                download_material_list:
                  type: array
                  description: ダウンロード素材の一覧
                  items:
                    type: object
                    properties:
                      part_id:
                        type: integer
                        description: parts.id 選択したパートのIDを入力する
                      file_url:
                        type: string
                        description: >-
                          S3やFlettyにダウンロード素材をSDKやAPI経由でアップロードした際、レスポンスとして帰ってくるurlを入力する
                preview_list:
                  type: array
                  description: プレビュー素材の一覧
                  items:
                    type: object
                    properties:
                      file_url:
                        type: string
                        description: >-
                          S3やFlettyにダウンロード素材をSDKやAPI経由でアップロードした際、レスポンスとして帰ってくるurlを入力する
        description: |-
          サムネイルのみfileとしてリクエストする
          ダウンロード可能データとプレビューは先にAPIでS3に格納しておく
      tags:
        - Materials
  /contents_upload:
    parameters: []
    post:
      summary: Contents Upload
      operationId: post-contents_upload
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      file_url:
                        type: string
                        description: FileをアップロードしたS3のURL
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      description: |-
        素材データや作品データをS3にアップロードする際に使用する
        複数ファイルがアップロードされた場合、zip化してS3に保存する

        基本的に拡張子のバリデーションはnuxt側で行うが、
        必要であればAPI側にもバリデーションも追加する
      security:
        - access_token: []
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                file_list:
                  type: array
                  items:
                    type: object
                    properties:
                      file:
                        type: string
                        format: file
      tags:
        - General
  /preview_upload:
    parameters: []
    post:
      summary: Preview Upload
      operationId: post-preview_upload
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      file_url:
                        type: string
                        description: FileをアップロードしたS3のURL
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      description: |-
        プレビューデータをS3にアップロードする際に使用する

        基本的に拡張子のバリデーションはnuxt側で行うが、
        必要であればAPI側にもバリデーションも追加する
      security:
        - access_token: []
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: file
      tags:
        - General
  /mix_recruitments:
    parameters: []
    post:
      summary: Create Mix Recruitments
      operationId: post-mix_recruitments
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                    description: trueを返す
                  data:
                    type: object
                    properties:
                      mix_recruitments:
                        type: integer
                        description: 作成したmix_recruitments.idを返す
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      description: >-
        ミックス募集追加申請


        リクエストのbased_on_core_material_idに紐づくcore_materialsについて下記条件を満たす必要がある

        プロジェクトは下記の条件を満たす必要がある

        projects.status = 募集中

        素材がある場合、下記条件を満たす必要がある

        materials.status = 公開済


        下記で登録

        core_materials.thumbnail = projects.thumbnail

        core_materials.core_materials_json =
        {もと素材のcore_materials}.core_materials_json

        core_materials.core_materials_json = null


        term_end_dateは下記条件を満たす必要がある

        term_end_date >= {本日+7日}
      security:
        - access_token: []
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                based_on_core_material_id:
                  type: integer
                  description: |-
                    元となった素材のID (core_materials.id)
                    元素材がなく、プロジェクトから作成した場合はプロジェクトのcore_materials.id
                title:
                  type: string
                  description: |-
                    ミックス募集タイトル
                    mix_recruitments.titleとcore_materials.titleに登録
                description:
                  type: string
                  description: |-
                    ミックス募集説明文
                    mix_recruitments.descriptionに登録
                'tags[]':
                  type: array
                  description: |-
                    ＃タグの登録

                    テキストのリストで受け取り、下記の処理で登録

                    1.入力されたタグがtagsに存在する?

                    2-1.存在する場合：tags.idを取得する

                    2-2.存在しない場合：tagsに新規で作成し、idを取得する

                    3.tag_core_materialでリレーションする

                    同じ名前のタグを複数登録しようとした場合、最初のタグのみ登録するようにする
                    例）下記の内容でタグと登録してきたとする
                    「ロック」「ロック」「ロック」「ポップ」
                    この場合、「ロック」「ポップ」で登録する
                  items:
                    type: string
                term_end_date:
                  type: string
                  description: |-
                    希望締切期限
                    mix_recruitments.term_end_dateに登録
                download_material_list:
                  description: |-
                    ダウンロードリスト
                    S3にダウンロード素材をAPI経由でアップロードした際、レスポンスとして帰ってくるurlを入力する
                  type: array
                  items:
                    type: string
                preview_list:
                  description: |-
                    プレビューリスト
                    S3にプレビュー素材API経由でアップロードした際、レスポンスとして帰ってくるurlを入力する
                  type: array
                  items:
                    type: string
        description: |-
          サムネイルのみfileとしてリクエストする
          ダウンロード可能データとプレビューは先にAPIでS3に格納しておく
      tags:
        - Mix
    get:
      summary: Get Application Mix Recruitments
      operationId: get-mix_recruitments
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      source_material_relation:
                        $ref: '#/components/schemas/SourceMaterialRelation'
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      description: >-
        ミックス募集入力画面の表示内容取得


        リクエストにはもと素材として使用するプロジェクト、もしくは素材のcore_materials.idを入力する

        リクエストのcore_material_idに紐づく元素材として使用してきたプロジェクト・素材一覧を返す（source_material_relation）


        プロジェクトが下記の条件を満たす必要がある

        projects.status = 募集中


        素材がある場合、下記条件を満たす必要がある

        materials.status = 公開済
      parameters: []
      security:
        - access_token: []
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                core_material_id:
                  type: integer
                  description: もと素材として使用するプロジェクト、もしくは素材のcore_materials.idを入力する
              required:
                - core_material_id
        description: ''
      tags:
        - Mix
  /mix_suggestions:
    parameters: []
    post:
      summary: Create Mix Suggestions
      operationId: post-mix_suggestions
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      mix_suggestions:
                        type: integer
                        description: 作成したmix_suggestions.idを返す
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      description: |-
        ミックス提案追加申請

        リクエストにはミックス募集のmix_recruitments.idを入力する

        ミックス提案が下記の条件を満たす必要がある
        mix_recruitments.status = 公開済

        mix_suggestions、core_materialsに対して登録を行なっていく
        mix_suggestions.status = 選考中

        パートは「MIX/マスタリング」を選択している状態として登録する
        下記にそれぞれ素材や作品と同様の登録方法で登録する
        core_materials.core_materials_json
        core_materials.part_id_list
        part_core_material
      security:
        - access_token: []
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                mix_recruitment_id:
                  type: integer
                  description: 提案を行うミックス募集のmix_recruitments.idを入力する
                file:
                  type: string
                  format: file
                  description: |-
                    ファイルはwavのみ許可
                    spatieでS3に登録後、URLを
                    download_contents.url
                    に登録し、core_materialsと紐づける

                    download_contents.part_id = {MIX/マスタリングのパートID}
                    で登録する
                description:
                  type: string
                  description: |-
                    ミックス提案のアピールポイントの説明文
                    mix_suggestions.descriptionに登録

                    最大300文字まで入力可能
        description: ''
      tags:
        - Mix
    get:
      summary: Get Application Mix Suggestions
      operationId: get-mix_suggestions
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      mix_recruitment:
                        $ref: '#/components/schemas/MixRecruitment'
        '400':
          $ref: '#/components/responses/400-Invalid-Request'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      description: |-
        ミックス提案入力画面の表示内容取得

        リクエストにはミックス募集のmix_recruitments.idを入力する

        ミックス提案が下記の条件を満たす必要がある
        mix_recruitments.status = 公開済
      parameters: []
      security:
        - access_token: []
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                mix_recruitment_id:
                  type: integer
                  description: 提案を行うミックス募集のmix_recruitments.idを入力する
              required:
                - mix_recruitment_id
        description: ''
      tags:
        - Mix
  /tag_for_application:
    parameters: []
    get:
      summary: Get Tag For Application
      operationId: get-tag_for_application
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      admin_tag_list:
                        type: array
                        description: |-
                          下記条件のtagsをレスポンスとして返す
                          tags.type = use_to_application
                        items:
                          $ref: '#/components/schemas/RegisterDisplayTags'
        '401':
          $ref: '#/components/responses/401-Invalid-AccessToken'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      description: |
        プロジェクト作成や作品登録などの登録系にて選択可能なタグとして表示する「タグ一覧」を取得する
      parameters: []
      security:
        - access_token: []
      tags:
        - Tags
  /news:
    parameters: []
    get:
      summary: Get News List
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                allOf:
                  - type: object
                    properties:
                      data:
                        type: array
                        description: news.status = 1 のnewsを取得
                        items:
                          $ref: '#/components/schemas/News'
                  - $ref: '#/components/schemas/Pagination'
        '404':
          $ref: '#/components/responses/404-Not-Found'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      operationId: get-news
      description: |-
        ニュース一覧を取得する

        15件ずつ取得する

        取得条件：
        news.status = 1
      parameters:
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/per_page'
      tags:
        - News
  '/news/{news}':
    parameters:
      - $ref: '#/components/parameters/news'
    get:
      summary: Get News Detail
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      news_detail:
                        $ref: '#/components/schemas/NewsDetail'
        '404':
          $ref: '#/components/responses/404-Not-Found'
        '500':
          $ref: '#/components/responses/500-Server-Error'
      operationId: get-news-detail
      description: |-
        ニュース詳細を取得する

        取得条件：
        news.status = 1
      parameters: []
      tags:
        - News
  /me/notifications:
    get:
      summary: Notifications
      tags:
        - Me
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/Pagination'
                  - type: object
                    properties:
                      data:
                        type: array
                        items:
                          $ref: '#/components/schemas/Notifications'
      operationId: get-me-notifications
      description: >
        Get login user's notifications.


        Reference from 'notification_user' table and get the related
        'notifications' table data.


        Default pagination is 15 data per page.


        For the filters, please reference through the notifications' type
        column.


        When displaying the details page, simply get from the pagination data.
        (There's no difference from details content)
      security:
        - access_token: []
      parameters:
        - $ref: '#/components/parameters/per_page'
        - schema:
            type: string
            enum:
              - all
              - project
              - material
              - work
              - mix
              - review
              - participate
              - sales
          in: query
          name: notification_type
          description: Filter of notification type
    parameters: []
  /mypage/mix_suggestions:
    get:
      summary: My Mix Suggestions
      tags:
        - Mypage
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/Pagination'
                  - type: object
                    properties:
                      data:
                        type: array
                        items:
                          $ref: '#/components/schemas/MyMixSuggestion'
      operationId: get-mypage-mix-suggestions
      description: >-
        Retrieving the user's mix suggestions and see their suggestion's status
        for a project.


        Related tables are mainly "mix_suggestions", "mix_recruitments",
        "user_profiles", "projects"


        mix_suggestions:mix_recruitments is m:1


        mix_recruitments, user_profiles, projects are all m:m relation
      security:
        - access_token: []
      parameters:
        - $ref: '#/components/parameters/per_page'
        - $ref: '#/components/parameters/page'
        - schema:
            type: string
            enum:
              - all
              - 選考中
              - 採用
              - 却下
          in: query
          name: status
          description: 'mix_suggestions.status : Multiple selections possible except ALL'
        - $ref: '#/components/parameters/sort_type_up_down'
  '/mypage/mix_suggestions/{mix_suggestion}':
    get:
      summary: My Mix Suggestion Details
      tags:
        - Mypage
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ViewMyMixSuggestion'
      operationId: get-mypage-mix-suggestions-detail
      description: |-
        Retrieving the user's mix suggestions details

        More of the project info and mix_suggestion info will be displayed.

        Make sure that only login user's {mix_suggestion} is displayed.
      security:
        - access_token: []
    parameters:
      - schema:
          type: string
        name: mix_suggestion
        description: mix_suggestions.id 存在しなかった場合、404エラー
        in: path
        required: true
components:
  schemas:
    User:
      title: User
      type: object
      description: ''
      properties:
        id:
          type: integer
        auth0_user_id:
          type: string
        is_create_project:
          type: boolean
        is_official_user:
          type: boolean
        is_active:
          format: email
          type: boolean
        is_person_mark:
          type: boolean
          description: Set to true if the user's email has been verified.
        meta:
          $ref: '#/components/schemas/UserProfile'
        created_at:
          type: string
          format: date
          description: The date that the user was created.
      required:
        - id
        - auth0_user_id
        - is_create_project
        - is_official_user
        - is_active
        - is_person_mark
        - meta
      x-examples:
        example-1:
          id: 0
          auth0_user_id: string
          is_create_project: true
          is_active: true
          is_official_user: true
          is_person_mark: true
          meta:
            id: 10
            username: yuta_inoue
            company: Commude Inc.
            description: This is my introduction
            twitter_url: 'https://twitter.com/sampleuser'
            instagram_url: string
            facebook_url: 'https://facebook.com/sampleuser'
            other_url: 'https://www.other.com/sampleuser'
          created_at: '2019-08-24'
    CoreUserProfile:
      title: CoreUserProfile
      type: object
      description: ''
      properties:
        id:
          type: integer
        username:
          type: string
          example: yuta_inoue
          description: user_profiles.username
        icon:
          type: string
          description: user_profiles.icon
      required:
        - id
        - username
    UserProfile:
      title: UserProfile
      description: ''
      allOf:
        - $ref: '#/components/schemas/CoreUserProfile'
        - type: object
          properties:
            company:
              type: string
              example: Commude Inc.
              description: user_profiles.company
            description:
              type: string
              example: This is my introduction
              description: users_profiles.description
            twitter_url:
              type: string
              format: url
              example: 'https://twitter.com/sampleuser'
              description: user_profiles.twitter_url
            instagram_url:
              type: string
              format: url
              description: user_profiles.instagram_url
            facebook_url:
              type: string
              format: url
              example: 'https://facebook.com/sampleuser'
              description: user_profiles.facebook_url
            other_url:
              type: string
              format: url
              example: 'https://www.other.com/sampleuser'
              description: user_profiles.other_url
    UserProfileDetail:
      title: UserProfileDetail
      description: ユーザー詳細
      allOf:
        - $ref: '#/components/schemas/UserProfile'
        - type: object
          properties:
            username_kana:
              type: string
              description: |-
                user_profiles.username_kana
                ユーザー名（カナ）
            username_international:
              type: string
              description: |-
                user_profiles.username_international
                ユーザー名（英語名）
    UserProfileUseRegister:
      title: UserProfileUseRegister
      description: 作品登録時に使用するユーザーデータ
      allOf:
        - $ref: '#/components/schemas/CoreUserProfile'
        - type: object
          properties:
            username_kana:
              type: string
              description: |-
                user_profiles.username_kana
                ユーザー名（カナ）
            username_international:
              type: string
              description: |-
                user_profiles.username_international
                ユーザー名（英語名）
    Project:
      title: Project
      type: object
      properties:
        id:
          type: integer
        title:
          type: string
        description:
          type: string
        terms_description:
          type: string
        application_start_at:
          type: string
          format: date
        application_end_at:
          type: string
          format: date
        status:
          type: string
        main_photo:
          $ref: '#/components/schemas/Photo'
        owner:
          $ref: '#/components/schemas/User'
      required:
        - id
        - title
        - description
        - terms_description
        - application_start_at
        - application_end_at
        - status
      x-examples:
        example-1:
          id: 0
          title: string
          description: string
          terms_description: string
          application_start_at: '2019-08-24'
          application_end_at: '2019-08-24'
          status: string
          main_photo:
            id: 1
            large:
              url: /storage/12/sample.png
              height: 300
              width: 400
            medium:
              url: /storage/12/sample.png
              height: 300
              width: 400
            small:
              url: /storage/12/sample.png
              height: 300
              width: 400
          owner:
            id: 0
            auth0_user_id: string
            is_create_project: true
            is_active: true
            is_official_user: true
            is_person_mark: true
            meta:
              id: 10
              username: yuta_inoue
              company: Commude Inc.
              description: This is my introduction
              twitter_url: 'https://twitter.com/sampleuser'
              instagram_url: string
              facebook_url: 'https://facebook.com/sampleuser'
              other_url: 'https://www.other.com/sampleuser'
            created_at: '2019-08-24'
    DisplayProjectLarge:
      title: DisplayProjectLarge
      description: |-
        HOME画面やTOP画面の上部で表示する大きめのプロジェクト表示用データ
        募集期限が入っている
      allOf:
        - $ref: '#/components/schemas/CoreDisplayProject'
        - type: object
          properties:
            application_end_at:
              type: string
              description: projects.application_end_at
            status_update_at:
              type: string
              description: projects.status_update_at Nuxt側の動作：公開してから１ヶ月以内の場合、NEWアイコンを表示させる
    DisplayProjectRecruitment:
      title: DisplayProjectRecruitment
      x-stoplight:
        id: zrfy2yz7l37rl
      type: object
      description: |-
        Use this resource when using from Recruitment CoreDisplayMixRecruitment.

        The thumnnail is from project's photo through Spatie medialibrary.
      properties:
        id:
          type: number
          description: project.id
        thumbnail:
          $ref: '#/components/schemas/Photo'
      required:
        - id
        - thumbnail
    Photo:
      description: ''
      type: object
      x-examples:
        example-1:
          id: 0
          large:
            url: 'https://hogepiyo.com/550e8400-e29b-41d4-a716-446655440000.jpg'
            height: 300
            width: 400
          small:
            url: 'https://hogepiyo.com/550e8400-e29b-41d4-a716-446655440000.jpg'
            height: 300
            width: 400
          medium:
            url: 'https://hogepiyo.com/550e8400-e29b-41d4-a716-446655440000.jpg'
            height: 300
            width: 400
      properties:
        id:
          type: number
          example: 1
        large:
          $ref: '#/components/schemas/Image'
        medium:
          $ref: '#/components/schemas/Image'
        small:
          $ref: '#/components/schemas/Image'
      required:
        - id
        - large
        - medium
        - small
    Image:
      description: ''
      type: object
      x-examples:
        example-1:
          url: 'https://hogepiyo.com/550e8400-e29b-41d4-a716-446655440000.jpg'
          height: 300
          width: 400
      properties:
        url:
          type: string
          minLength: 1
          example: /storage/12/sample.png
        height:
          type: number
          example: 300
        width:
          type: number
          example: 400
      required:
        - url
        - height
        - width
    Pagination:
      description: ''
      type: object
      properties:
        meta:
          type: object
          properties:
            total:
              type: number
            per_page:
              type: number
            current_page:
              type: number
            last_page:
              type: number
            from:
              type: number
            to:
              type: number
            path:
              type: string
              minLength: 1
          required:
            - total
            - per_page
            - current_page
            - last_page
            - from
            - to
            - path
        links:
          type: object
          properties:
            first:
              type: string
              minLength: 1
            last:
              type: string
              minLength: 1
            prev:
              type: string
              minLength: 1
            next:
              type: string
              minLength: 1
          required:
            - first
            - last
            - prev
            - next
        data:
          type: array
          items:
            type: object
      required:
        - meta
        - links
      x-examples:
        example-1:
          meta:
            total: 50
            per_page: 10
            current_page: 2
            last_page: 5
            from: 11
            to: 20
            path: 'http://localhost/api/v1/users'
          links:
            first: 'http://localhost/api/v1/users?page=1'
            last: 'http://localhost/api/v1/users?page=5'
            prev: 'http://localhost/api/v1/users?page=1'
            next: 'http://localhost/api/v1/users?page=3'
      title: Pagination
    MypageProject:
      title: MypageProject
      description: |-
        マイページの主催プロジェクト一覧で表示するプロジェクト
        ステータスが追加されている
      type: object
      properties:
        id:
          type: integer
          description: projects.id もしくは core_materials.project_id
        title:
          type: string
          description: projects.title もしくは core_materials.title
        thumbnail:
          type: string
          description: project.thumbnail or core_materials.thumbnail
        status:
          type: string
          description: projects.status
    MypageProjectList:
      title: MypageProjectList
      description: 主催プロジェクト一覧で表示するプロジェクト情報
      allOf:
        - $ref: '#/components/schemas/MypageProject'
        - type: object
          properties:
            part_list:
              type: array
              description: >-
                core_materials.part_id_list もしくは
                part_core_material.core_material_id
                 = 対象のプロジェクトのcore_materials
              items:
                $ref: '#/components/schemas/DisplayParts'
            application_end_at:
              type: string
              description: projects.application_end_at
            material_num:
              type: number
              description: |-
                materials.project_id = 対象projects.id

                となる素材の総数
            work_num:
              type: number
              description: |-
                works.project_id = 対象projects.id

                となる作品の総数
    MypageProjectDetail:
      title: MypageProjectDetail
      description: 主催プロジェクト詳細で表示するプロジェクト情報
      allOf:
        - $ref: '#/components/schemas/MypageProject'
        - type: object
          properties:
            part_list:
              type: array
              description: >-
                core_materials.part_id_list もしくは
                part_core_material.core_material_id
                 = 対象のプロジェクトのcore_materials
              items:
                $ref: '#/components/schemas/DisplayParts'
            tag_list:
              type: array
              description: tag_core_material.core_material_id
              items:
                $ref: '#/components/schemas/DisplayTags'
            application_end_at:
              type: string
              description: projects.application_end_at
            description:
              type: string
              description: projects.description
            terms_description:
              type: string
              description: projects.terms_description
            preview_list:
              description: |-
                download_contents.core_material_id = 対象のcore_materials
                かつ
                download_contents.is_preview = ture
              type: array
              items:
                $ref: '#/components/schemas/PreviewData'
            download_list:
              type: array
              description: |-
                download_contents.core_material_id = 対象のcore_materials
                かつ
                download_contents.is_preview = false
              items:
                $ref: '#/components/schemas/DownloadData'
            reason_remand_rejection:
              type: string
              description: projects.reason_remand_rejection
    ProjectDetail:
      title: ProjectDetail
      description: プロジェクト詳細
      allOf:
        - $ref: '#/components/schemas/CoreDisplayProject'
        - type: object
          properties:
            application_end_at:
              type: string
              description: projects.application_end_at
            tag_list:
              type: array
              description: tag_core_material.core_material_id
              items:
                $ref: '#/components/schemas/DisplayTags'
            description:
              type: string
              description: projects.description
            terms_description:
              type: string
              description: projects.terms_description
            preview_list:
              type: array
              description: |-
                download_contents.core_material_id = 対象のcore_materials
                かつ
                download_contents.is_preview = ture
              items:
                $ref: '#/components/schemas/PreviewData'
            download_list:
              type: array
              description: |-
                download_contents.core_material_id = 対象のcore_materials
                かつ
                download_contents.is_preview = false
              items:
                $ref: '#/components/schemas/DownloadData'
    SearchResponce:
      title: SearchResponce
      type: object
      description: |
        core_materialsの検索結果を出力する
        それぞれのidは一つのみnullではなく値が入る
        例)
        プロジェクトの場合 project_id = 1、他のID=null
      properties:
        project_id:
          type: integer
          nullable: true
          description: core_materials.project_id or null
        work_id:
          type: integer
          nullable: true
          description: core_materials.work_id or null
        material_id:
          type: integer
          nullable: true
          description: core_materials.material_id or null
        title:
          type: string
          description: core_materials.title
        thumbnail:
          type: string
          description: core_materials.thumbnail
        user_profile:
          $ref: '#/components/schemas/DisplayUserProfile'
        part_list:
          type: array
          description: >-
            core_materials.part_id_list もしくは
            part_core_material.core_material_id
             = 対象のプロジェクトのcore_materials
          items:
            $ref: '#/components/schemas/DisplayParts'
    CoreDisplayProject:
      title: CoreDisplayProject
      type: object
      description: プロジェクト表示の共通部分
      properties:
        id:
          type: integer
          description: projects.id もしくは core_materials.project_id
        title:
          type: string
          description: projects.title もしくは core_materials.title
        thumbnail:
          type: string
          description: project.thumbnail or core_materials.thumbnail
        user_profile:
          $ref: '#/components/schemas/DisplayUserProfile'
        part_list:
          type: array
          description: >-
            core_materials.part_id_list もしくは
            part_core_material.core_material_id
             = 対象のプロジェクトのcore_materials
          items:
            $ref: '#/components/schemas/DisplayParts'
    DisplayProjectRelation:
      title: DisplayProjectRelation
      description: |-
        HOME画面やTOP画面の中部で表示する小さめのプロジェクト表示用データ
        プロジェクト > 素材 > 作品 と連携する
      allOf:
        - $ref: '#/components/schemas/CoreDisplayProject'
        - type: object
          properties:
            material_list:
              type: array
              description: >-
                枠が２枠あり、可能な限り埋める

                1.materials.project_id = 対象プロジェクトid

                かつ

                materials.is_pickup = true

                上記の素材が選択される

                2.2枠が埋まらなかった場合、プロジェクトに紐づくmaterialsにてis_pickup =
                falseの素材をランダムで埋まらなかった枠数分選択する
              items:
                $ref: '#/components/schemas/DisplayMaterialWorkRelation'
    DisplayParts:
      title: DisplayParts
      type: object
      description: 表示用パート
      properties:
        id:
          type: integer
          description: parts.id
        name:
          type: string
          description: parts.name
        icon_url:
          type: string
          description: works.icon_url
        parent_part_id:
          type: boolean
          description: |-
            parts.parent_part_id

            nullだった場合、親パート
        is_arrangement_child:
          type: boolean
          description: |-
            parts.is_arrangement_child

            編曲の子パートのみ、管理画面で追加可能なので、フラグ管理する
    PreviewData:
      title: PreviewData
      description: |-
        プレビューデータ
        download_contents.is_preview = true となるもの
      allOf:
        - $ref: '#/components/schemas/DownloadData'
        - type: object
          properties:
            is_streaming:
              type: boolean
              description: |-
                download_contents.is_streaming
                ストリーミング再生を行う場合、Flettyのsdkを使用し、再生する
    DownloadData:
      title: DownloadData
      type: object
      description: |-
        ダウンロードデータ
        download_contents.is_preview = false となるもの
      properties:
        id:
          type: integer
          description: parts.id
        url:
          type: string
          description: parts.name
        part:
          $ref: '#/components/schemas/DisplayParts'
    DisplayTags:
      title: DisplayTags
      type: object
      description: 表示用タグ
      properties:
        id:
          type: integer
          description: tags.id
        name:
          type: string
          description: tags.name
    DisplayUserProfile:
      title: DisplayUserProfile
      type: object
      description: |-
        プロジェクトや作品の製作者として表示するようのユーザーデータ
        名前とアイコンとクリックした際に詳細画面に遷移できるよう、IDを持つ
      properties:
        id:
          type: integer
          description: user_profiles.id
        name:
          type: string
          description: user_profiles.username
        icon:
          type: string
          description: user_profiles.icon
    DisplayMaterialWorkRelation:
      title: DisplayMaterialWorkRelation
      description: |-
        TOPやHOME画面で表示する素材
        プロジェクトと作品と紐づく
      allOf:
        - $ref: '#/components/schemas/CoreDisplayMaterial'
        - type: object
          properties:
            work_list:
              type: array
              items:
                $ref: '#/components/schemas/DisplayWorkSmall'
    DisplayMaterialMaterialRelation:
      title: DisplayMaterialMaterialRelation
      description: 素材と素材の連携を表示
      allOf:
        - $ref: '#/components/schemas/CoreDisplayMaterial'
        - type: object
          properties:
            material_list:
              type: array
              description: |-
                1次素材のcore_materials : A
                2次素材のcore_materials : B
                とした場合、下記となるcore_materialsのリスト
                A.id = B.based_on_core_material_id
              items:
                $ref: '#/components/schemas/CoreDisplayMaterial'
    PickUpMaterial:
      title: PickUpMaterial
      description: |-
        素材詳細の追加された素材

        素材詳細のcore_materials.based_on_core_material_id = core_materials.idを取得
      allOf:
        - $ref: '#/components/schemas/CoreDisplayMaterial'
        - type: object
          properties:
            material_list:
              type: array
              description: |-
                1次素材のcore_materials : A
                2次素材のcore_materials : B
                とした場合、下記となるcore_materialsのリスト
                B.id = A.based_on_core_material_id
              items:
                $ref: '#/components/schemas/CoreDisplayMaterial'
    SourceMaterialRelation:
      title: SourceMaterialRelation
      description: 素材や作品で元素材として使用してきた素材を表示する
      allOf:
        - description: 紐づくプロジェクトデータを出力
          properties:
            project:
              $ref: '#/components/schemas/DisplayProjectLarge'
        - properties:
            material_list:
              type: array
              description: |-
                対象素材や作品のcore_materials.core_materials_jsonに紐づくcore_materialsを取得

                下記条件のものをリストとして返す
                ・project_id = null プロジェクトの素材ではないこと
                ・is_detail_display = true 公開可能な素材であること

                ソート順はcreated_atのasc
              items:
                $ref: '#/components/schemas/CoreMaterial'
      type: object
    MypageMaterial:
      title: MypageMaterial
      type: object
      description: マイページ素材
      properties:
        id:
          type: integer
          description: materials.id or core_materials.material_id
        title:
          type: string
          description: materials.title or core_materials.title
        thumbnail:
          type: string
          description: materials.thumbnail or core_materials.thumbnail
        status:
          type: string
          description: materials.status
    MypageMaterialList:
      title: MypageMaterialList
      description: マイページ素材一覧
      allOf:
        - $ref: '#/components/schemas/MypageMaterial'
        - type: object
          properties:
            is_pickup:
              type: boolean
              description: materials.is_pickup
            user_profile:
              $ref: '#/components/schemas/DisplayUserProfile'
    CoreMaterial:
      title: CoreMaterial
      type: object
      description: コア素材
      properties:
        id:
          type: integer
          description: core_materials.id
        type:
          type: string
          description: |-
            素材のタイプ
            「プロジェクト」「作品」「素材」「ミックス提案」「ミックス募集」のいずれか
            core_materialsの下記カラムにてnullではないものがそのtypeとなる
            project_id
            material_id
            work_id
            mix_suggestion_id
            mix_recruitment_id
        connected_id:
          type: integer
          description: |-
            typeに紐づくID
            core_materialsの下記カラムの中でnullではないものが入る
            project_id
            material_id
            work_id
            mix_suggestion_id
            mix_recruitment_id
            詳細画面への遷移などに使用する
        title:
          type: string
          description: materials.title or core_materials.title
        thumbnail:
          type: string
          description: core_materials.thumbnail
        user_profile:
          $ref: '#/components/schemas/DisplayUserProfile'
        part_list:
          type: array
          description: >-
            core_materials.part_id_list もしくは
            part_core_material.core_material_id
             = 対象の素材のcore_materials
          items:
            $ref: '#/components/schemas/DisplayParts'
      x-examples:
        example-1:
          id: 0
          type: string
          connected_id: 0
          title: string
          thumbnail: string
          user_profile:
            id: 0
            name: string
            icon: string
          part_list:
            - id: 0
              name: string
              icon_url: string
              parent_part_id: true
              is_arrangement_child: true
    CoreDisplayMaterial:
      title: CoreDisplayMaterial
      type: object
      description: 素材の共通部分
      properties:
        id:
          type: integer
          description: materials.id or core_materials.material_id
        title:
          type: string
          description: materials.title or core_materials.title
        thumbnail:
          type: string
          description: materials.thumbnail or core_materials.thumbnail
        user_profile:
          $ref: '#/components/schemas/DisplayUserProfile'
        part_list:
          type: array
          description: >-
            core_materials.part_id_list もしくは
            part_core_material.core_material_id
             = 対象の素材のcore_materials
          items:
            $ref: '#/components/schemas/DisplayParts'
      x-examples:
        example-1:
          id: 0
          title: string
          thumbnail: string
          user_profile:
            id: 0
            name: string
            icon: string
          part_list:
            - id: 0
              name: string
              icon_url: string
              parent_part_id: true
              is_arrangement_child: true
      x-internal: false
    MaterialDetail:
      title: MaterialDetail
      description: 素材の詳細
      allOf:
        - $ref: '#/components/schemas/CoreDisplayMaterial'
        - type: object
          properties:
            tags:
              type: array
              description: |-
                tag_core_material.core_material_id = 対象のcore_materials
                で取得できるtagsのlist
              items:
                $ref: '#/components/schemas/DisplayTags'
            preview_list:
              type: array
              description: |-
                download_contents.core_material_id = 対象のcore_materials
                上記のdownload_contentsのうち、下記の条件のものを取得
                download_contents.is_preview = true
              items:
                $ref: '#/components/schemas/PreviewData'
            download_list:
              type: array
              description: |-
                download_contents.core_material_id = 対象のcore_materials
                上記のdownload_contentsのうち、下記の条件のものを取得
                download_contents.is_preview = false
              items:
                $ref: '#/components/schemas/DownloadData'
            description:
              type: string
              description: materials.description
            terms_description:
              type: string
              description: materials.terms_description
    MixRecruitment:
      title: MixRecruitment
      type: object
      description: ミックス募集の基礎部分
      properties:
        id:
          type: integer
          description: mix_recruitments.id or core_materials.mix_recruitment_id
        title:
          type: string
          description: mix_recruitments.title or core_materials.title
        user_profile:
          $ref: '#/components/schemas/DisplayUserProfile'
        tags:
          type: array
          description: |-
            ミックス募集に紐づくタグ一覧

            mix_recruitments.id = core_materials.mix_recruitment_id
            で取得できるcore_materialsに紐づく
            tag_core_material
            を取得する
          items:
            type: string
        description:
          type: string
          description: mix_recruitments.description
    CoreDisplayMixRecruitment:
      title: CoreDisplayMixRecruitment
      type: object
      description: ミックス募集の共通部分
      properties:
        id:
          type: integer
          description: mix_recruitments.id or core_materials.mix_recruitment_id
        title:
          type: string
          description: mix_recruitments.title or core_materials.title
        user_profile:
          $ref: '#/components/schemas/DisplayUserProfile'
        preview_list:
          type: array
          description: |-
            download_contents.core_material_id = 対象のcore_materials
            かつ
            download_contents.is_preview = ture
          items:
            $ref: '#/components/schemas/PreviewData'
        project:
          $ref: '#/components/schemas/DisplayProjectRecruitment'
    CoreViewMixRecruitment:
      title: CoreViewMixRecruitment
      type: object
      description: |-
        ミックス募集の共通部分 (詳細画面)

        Mix Recruitment shared properties. (For details screen)
      properties:
        id:
          type: integer
          description: mix_recruitments.id or core_materials.mix_recruitment_id
        title:
          type: string
          description: mix_recruitments.title or core_materials.title
        user_profile:
          $ref: '#/components/schemas/DisplayUserProfile'
        preview_list:
          type: array
          description: |-
            download_contents.core_material_id = 対象のcore_materials
            かつ
            download_contents.is_preview = ture
          items:
            $ref: '#/components/schemas/PreviewData'
        project:
          $ref: '#/components/schemas/DisplayProjectLarge'
    MixRecruitmentSmall:
      title: MixRecruitmentSmall
      description: ミックス募集の概要
      allOf:
        - $ref: '#/components/schemas/CoreDisplayMixRecruitment'
        - type: object
          properties:
            term_end_date:
              type: string
              description: mix_recruitments.term_end_date
    Work:
      title: Work
      type: object
      description: 作品の最小情報
      properties:
        id:
          type: integer
          description: works.id or core_materials.work_id
        title:
          type: string
          description: works.title or core_materials.title
        thumbnail:
          type: string
          description: works.thumbnail or core_materials.thumbnail
    UsedPartList:
      title: UserdPartList
      type: object
      description: 元素材にて使用済みのパートidリスト
      properties:
        used_part_id:
          description: core_materials.part_id_list
          type: array
          items:
            $ref: '#/components/schemas/DisplayParts'
    PartList:
      title: PartList
      type: object
      description: プロジェクト作成や素材登録、作品登録で表示するパートリスト
      properties:
        part_list:
          type: array
          description: |-
            ミックスを除いたパートを一覧で取得する

            編曲の子パートを除き、パートが増減することはない
            ただ、名前とアイコンは変わる可能性があるので、データとして送信する

            編曲の子パートは下記フラグで判断し、画面出力とバリデーションに使用する
            parts.is_arrangement_child
          items:
            $ref: '#/components/schemas/DisplayParts'
    Step1WorkRegister:
      title: Step1WorkRegister
      type: object
      description: 作品登録Step1の表示に使用する
      properties:
        id:
          type: integer
          description: works.id or core_materials.work_id
        title:
          type: string
          description: works.title or core_materials.title
        title_kana:
          type: string
          description: works.title_kana
        preview_url:
          type: string
          description: works.preview_url
        jacket_url:
          type: string
          description: works.jacket_url
        lyrics_url:
          type: string
          description: works.lyrics_url
        tag_list:
          type: array
          description: |-
            tag_core_material.core_material_id = 対象のcore_materials
            で取得できるtagsのlist
          items:
            $ref: '#/components/schemas/DisplayTags'
        description:
          type: string
          description: works.description
        part_list:
          type: array
          description: |-
            core_materials.core_materials_jsonのjson内で
            core_material_id = core_materials.id
            となる
            part_id_list
            を取得
          items:
            $ref: '#/components/schemas/DisplayParts'
    DisplayWorkSmall:
      title: DisplayWorkSmall
      description: 小さい表示の作品情報
      allOf:
        - $ref: '#/components/schemas/Work'
        - type: object
          properties:
            user_profile:
              $ref: '#/components/schemas/DisplayUserProfile'
            tag_list:
              type: array
              description: |-
                tag_core_material.core_material_id = 対象のcore_materials
                で取得できるtagsのlist
              items:
                $ref: '#/components/schemas/DisplayTags'
    MypageWork:
      title: MypageWork
      description: マイページ用の作品
      allOf:
        - $ref: '#/components/schemas/Work'
        - type: object
          properties:
            tag_list:
              type: array
              description: >-
                core_materials.part_id_list もしくは
                part_core_material.core_material_id
                 = 対象の素材のcore_materials
              items:
                $ref: '#/components/schemas/DisplayTags'
            status:
              type: string
              description: works.status
    MypageWorkList:
      title: MypageWorkList
      description: |-
        主催プロジェクト内作品一覧用
        MypageWorkにユーザー情報を追加
      allOf:
        - $ref: '#/components/schemas/Work'
        - type: object
          properties:
            status:
              type: string
              description: works.status
            user_profile:
              $ref: '#/components/schemas/DisplayUserProfile'
    WorkDetail:
      title: WorkDetail
      description: |-
        作品詳細

        表示条件：
        works.status = 1
      allOf:
        - $ref: '#/components/schemas/DisplayWorkSmall'
        - type: object
          properties:
            preview:
              $ref: '#/components/schemas/PreviewData'
            description:
              type: string
              description: works.description
            created_at:
              type: string
              description: works.created_at
            youtube_url:
              type: string
              description: works.youtube_url
            youtube_total_views:
              type: number
              description: works.youtube_total_views
    MypageWorkDetail:
      title: MypageWorkDetail
      description: マイページ用の作品
      allOf:
        - $ref: '#/components/schemas/MypageWork'
        - type: object
          properties:
            preview:
              $ref: '#/components/schemas/PreviewData'
            description:
              type: string
              description: works.description
            created_at:
              type: string
              description: works.created_at
            youtube_url:
              type: string
              description: works.youtube_url
            youtube_total_views:
              type: number
              description: works.youtube_total_views
            isrc:
              type: string
              description: works.isrc
            reason_remand_rejection:
              type: string
              description: works.reason_remand_rejection
    PreviewContents:
      title: PreviewContents
      x-stoplight:
        id: qzcbszrch1gcw
      type: object
      description: プレビューファイル登録時に使用
      properties:
        file_url:
          type: string
          description: S3やFlettyにダウンロード素材をSDKやAPI経由でアップロードした際、レスポンスとして帰ってくるurlを入力する
    DownloadContents:
      title: DownloadContents
      x-stoplight:
        id: qzcbszrch1gcw
      description: 素材追加申請時のパート毎のダウンロードファイル設定
      x-examples:
        example-1:
          file_url: string
          part_id: 0
      x-internal: false
      type: object
      properties:
        part_id:
          type: integer
          description: |-
            parts.id
            選択したパートのIDを入力する
        file_url:
          type: string
          description: S3やFlettyにダウンロード素材をSDKやAPI経由でアップロードした際、レスポンスとして帰ってくるurlを入力する
    RegisterDisplayTags:
      title: RegisterDisplayTags
      x-stoplight:
        id: ytruseq10hlwj
      type: object
      description: |-
        作品申請や素材申請など申請時に出力する管理者画面で設定された
        「プロジェクト、素材などを申請するときに＃タグ」を出力する

        下記条件のtagsをレスポンスとして返す
        tags.type = use_to_application
      properties:
        id:
          type: integer
          description: tags.id
        name:
          type: string
          description: tags.name
    News:
      title: News
      x-stoplight:
        id: ytruseq10hlwj
      type: object
      description: お知らせ一覧用のデータ
      properties:
        id:
          type: integer
          description: news.id
        title:
          type: string
          description: news.title
        thumbnail:
          type: string
          description: news.thumbnail
        published_at:
          type: string
          description: news.published_at
    NewsDetail:
      title: NewsDetail
      x-stoplight:
        id: 4cubadfu4gvem
      description: お知らせ詳細
      allOf:
        - $ref: '#/components/schemas/News'
        - type: object
          properties:
            detail:
              type: string
              description: news.detail
    Notifications:
      title: Notifications
      x-stoplight:
        id: ytruseq10hlwj
      type: object
      description: 通知一覧用のデータ
      properties:
        id:
          type: integer
          description: notifications.id
        title:
          type: string
          description: notifications.title
        type:
          type: string
          description: notifications.thumbnail
        created_at:
          type: string
          description: notifications.published_at
        sent_at:
          type: string
          description: notifications.sent_at
    NotificationDetail:
      title: NotificationDetail
      x-stoplight:
        id: 4cubadfu4gvem
      description: 通知詳細
      allOf:
        - $ref: '#/components/schemas/Notifications'
        - type: object
          properties:
            content:
              type: string
              description: notifications.content
    MyMixSuggestion:
      title: MyMixSuggestion
      x-stoplight:
        id: grapo3edhh7zt
      description: 'List Resource for Mypage''s mix suggestions. '
      type: object
      properties:
        id:
          type: number
          description: mix_suggestions.id
        mix_recruitment:
          $ref: '#/components/schemas/CoreDisplayMixRecruitment'
        staus:
          type: string
          description: mix_suggestions.status
        created_at:
          type: string
          description: mix_suggestions.created_at
          format: date-time
        updated_at:
          type: string
          description: mix_suggestions.updated_at
          format: date-time
      required:
        - id
        - mix_recruitment
        - staus
        - created_at
        - updated_at
    ViewMyMixSuggestion:
      title: MyMixSuggestion
      x-stoplight:
        id: grapo3edhh7zt
      description: 'Detail Resource for Mypage''s mix suggestions. '
      type: object
      properties:
        id:
          type: number
          description: mix_suggestions.id
        mix_recruitment:
          $ref: '#/components/schemas/CoreViewMixRecruitment'
        description:
          type: string
          description: mix_suggestions.de
        mix_description:
          type: string
          description: mix_suggestions.mix_description
        staus:
          type: string
          description: mix_suggestions.status
        created_at:
          type: string
          description: mix_suggestions.created_at
          format: date-time
        updated_at:
          type: string
          description: mix_suggestions.updated_at
          format: date-time
      required:
        - id
        - mix_recruitment
        - description
        - mix_description
        - staus
        - created_at
        - updated_at
  securitySchemes:
    access_token:
      type: http
      scheme: bearer
      description: Credentials or access token for API
  requestBodies:
    Photo-Upload:
      content:
        application/json:
          schema:
            type: object
            properties:
              photo:
                type: string
                format: binary
            required:
              - photo
          examples:
            example-1:
              value:
                photo: <image file here>
      description: 画像専用のリクエスト項目
  parameters:
    project:
      name: project
      in: path
      schema:
        type: integer
        example: 1
      description: projects.id 存在しなかった場合、404エラー
      required: true
    dlc:
      name: download_content
      in: path
      required: true
      schema:
        type: integer
        example: 2
      description: Download Content ID
    jacket:
      name: jacket
      in: path
      required: true
      schema:
        type: integer
        example: 3
      description: Jacket ID
    material:
      name: material
      in: path
      required: true
      schema:
        type: integer
        example: 4
      description: Material ID
    user:
      name: user
      in: path
      required: true
      schema:
        type: integer
        example: 2
      description: User ID
    page:
      name: page
      in: query
      required: false
      schema:
        type: integer
        example: 2
        minimum: 1
      description: Page No
    per_page:
      name: per_page
      in: query
      schema:
        type: integer
        minimum: 1
        exclusiveMinimum: true
      description: No. of items to display in 1 page.
    categories:
      name: 'categories[]'
      in: query
      required: false
      schema:
        type: string
      description: category_id
    genres:
      name: 'genres[]'
      in: query
      required: false
      schema:
        type: string
      description: genre_id
    parts:
      name: 'parts[]'
      in: query
      required: false
      schema:
        type: string
      description: parts IDs array
    tags:
      name: 'tags[]'
      in: query
      required: false
      schema:
        type: string
      description: Tag IDs array
    search_type:
      name: search_type
      in: query
      required: false
      schema:
        type: string
        enum:
          - project
          - work
          - material
          - mix
          - user
          - all
      description: プロジェクト/作品/素材/ミックス/ユーザー/すべて のいずれか
    sort_type:
      name: sort_type
      in: query
      required: false
      schema:
        type: string
        enum:
          - new
          - old
          - ranking
      description: 最新順/古い順/ランキング のいずれか(ランキングは access_num カラムから参照)
    search_tag_txt:
      name: search_tag_txt
      in: query
      required: false
      schema:
        type: string
      description: タグをキーワード検索
    work:
      name: work
      in: path
      required: true
      schema:
        type: string
        example: '1'
      description: works.id 存在しなかった場合、404エラー
    user_profile:
      name: user_profile
      in: path
      required: true
      schema:
        type: string
        example: '1'
      description: user_profiles.id 存在しなかった場合、404エラー
    news:
      name: news
      in: path
      required: true
      schema:
        type: string
        example: '1'
      description: news.id 存在しなかった場合、404エラー
    status:
      name: 'status[]'
      in: query
      required: false
      schema:
        type: string
      description: status IDs array
    sort_type_up_down:
      name: sort_type
      in: query
      required: false
      schema:
        type: string
      description: 最新順/古い順
    status_selector:
      name: status
      in: query
      required: false
      schema:
        type: string
        example: '1'
      description: status ID
    mix_suggeston:
      name: mix_suggeston
      in: path
      required: true
      schema:
        type: number
      description: mix_suggestions.id 存在しなかった場合、404エラー
  responses:
    422-Validation-Error-Response:
      description: ''
      content:
        application/json:
          schema:
            description: ''
            type: object
            x-examples:
              example-1:
                errors:
                  password:
                    - パスワードは必ず指定してください。
            properties:
              errors:
                type: object
                required:
                  - something
                properties:
                  something:
                    type: array
                    items:
                      type: string
                      example: 'Please enter {field}'
                    readOnly: true
                readOnly: true
            required:
              - errors
          examples:
            example-1:
              value:
                errors:
                  something:
                    - 'Please enter {field}'
        application/xml:
          schema:
            type: object
            properties: {}
    201-Photo-Created:
      description: Example response
      content:
        application/json:
          schema:
            type: object
            properties:
              photo:
                $ref: '#/components/schemas/Photo'
          examples: {}
        application/xml:
          schema:
            type: object
            properties: {}
    400-Invalid-Request:
      description: 無効なリクエスト（パラメータ不足等）
      content:
        application/json:
          schema:
            type: object
            properties:
              status:
                type: boolean
              error:
                type: object
                properties:
                  code:
                    type: number
                  message:
                    type: string
          examples:
            response:
              value:
                status: false
                error:
                  code: 400
                  message: Invalid Request.
    401-Invalid-AccessToken:
      description: 不正または期限切れたaccess_token
      content:
        application/json:
          schema:
            type: object
            properties:
              status:
                type: boolean
              error:
                type: object
                properties:
                  code:
                    type: number
                  message:
                    type: string
          examples:
            response:
              value:
                status: false
                error:
                  code: 401
                  message: Invalid access_token.
    404-Not-Found:
      description: データが存在しない
      content:
        application/json:
          schema:
            type: object
            properties:
              status:
                type: boolean
              error:
                type: object
                properties:
                  code:
                    type: number
                  message:
                    type: string
          examples:
            response:
              value:
                status: false
                error:
                  code: 404
                  message: Not Found
    500-Server-Error:
      description: サーバーエラー
      content:
        application/json:
          schema:
            type: object
            properties:
              status:
                type: boolean
              error:
                type: object
                properties:
                  code:
                    type: number
                  message:
                    type: string
          examples:
            response:
              value:
                status: false
                error:
                  code: 500
                  message: Server Error.