Coder Social home page Coder Social logo

book-application-kotlin's Introduction

概要

書籍管理システムです。 書籍と著者の情報をRDBに登録・変更・検索ができるAPIです

以下の技術が利用されている。

  • Spring boot 3 (Kotlin)
  • Junit 5 (Kotlin)
  • JDK17
  • Jooq 3.18.4

Local DBの立ち上げ方

本APIがDockerのMysql 8.0を利用しています。
DBのコンテーナーを実行には ./dockerディレクトリで以下のコマンドを実行する。

docker-compose up --build -d

コンテーナーの削除仕方

docker-compose down

DBにすでにデータが存在する。
そのデータは ./docker/schemas/books.sql ファイルで確認できる

Jooq ビルド

コマンドラインでビルド

gradlew generateJooq

Intellijでビルド

Gradleビルドしたら、Gradleのタスクの一覧にjooq/generateJooqタスクが追加される。
generateJooqを実行してください。



APIエンドポイント

全ての本籍を検索

全ての書籍の情報を返却する

  • URL: /v1/books

  • Method: GET

  • 成功レスポンス:

    • Code: 200 OK

    • Body:

       [
          {
              "bookId": 1,
              "author": "Tolkien",
              "title": "Hobbit"
          },
          {
              "bookId": 2,
              "author": "Tolkien",
              "title": "Lord of the Rings"
          },
          {
              "bookId": 3,
              "author": "Homer",
              "title": "Iliad"
          }
       ]

本籍検索

指定した書籍の情報を返却する

  • URL: /v1/book/{bookId}

  • Method: GET

  • 成功レスポンス:

    • Code: 200 OK

    • Body:

      {
          "bookId": 1,
          "author": "Tolkien",
          "title": "Hobbit"
      }
  • エラーレスポンス:

    • Code: 400 Bad Request
    • 原因: {bookId}に数字以外を設定する
    • Body: { "message": "bookIdパラメータにIntegerを設定してください", "details": "uri=/v1/book/n" }

著者検索

指定した著者の情報を返却する

  • URL: /v1/author/{authorId}

  • Method: GET

  • 成功レスポンス:

    • Code: 200 OK

    • Body:

      {
          "authorId": 1,
          "authorName": "Tolkien",
          "authorCountry": "UK",
          "works": [
              {
                  "bookId": 1,
                  "title": "Hobbit"
              },
              {
                  "bookId": 2,
                  "title": "Lord of the Rings"
              }
          ]

    }

  • エラーレスポンス:

    • Code: 400 Bad Request
    • 原因: {authorId}に数字以外を設定する
    • Body: { "message": "authorIdパラメータにIntegerを設定してください", "details": "uri=/v1/author/n" }

著者登録

著者をDBに追加する

  • URL: /v1/create/author

  • Method: PUT

  • リクエストJSON:

     {
	    "name":  "山本太郎",
	    "country": "Japan"
     }
  • 成功レスポンス:
    • Code: 200 OK

    • Body:

       {
          "message": "登録に成功しました。",
          "success": true
       }   
  • エラーレスポンス:
    • Code: 400 Bad Request
    • 原因: {"name"}が空
    • Body: { "message": "nameを設定してください。", "details": "uri=/v1/create/author"  }  

    • Code: 400 Bad Request
    • 原因: {"country"}が空
    • Body: { "message": "countryを設定してください。", "details": "uri=/v1/create/author"  }  

    • Code: 400 Bad Request
    • 原因: {"country"}が32文字より長い
    • Body: { "message": "countryは32文字以内に入力してください。", "details": "uri=/v1/create/author"}

    • Code: 400 Bad Request
    • 原因: {"name"}が64文字より長い
    • Body: { "message": "nameは64文字以内に入力してください。", "details": "uri=/v1/create/author"}

    • Code: 400 Bad Request
    • 原因: どれかのJsonキーがない時
    • Body: { "message": "Objectパラメターの必要なフィルドが設定されなかったため、Jsonリクエストがパースできませんでした。", "details": "uri=/v1/create/author"}

   

書籍登録

書籍をDBに追加する

  • URL: /v1/create/book

  • Method: PUT

  • リクエストJSON:

     {
	    "title": "本タイトル",
	    "authorId": 2
     }
  • 成功レスポンス:

  • Code: 200 OK

  • Body:

    	 {
         "message": "登録に成功しました。",
         "success": true
      }   
  • エラーレスポンス:

    • Code: 400 Bad Request

    • 原因: {"title"}が空

    • Body: { "message": "titleを設定してください。", "details": "uri=/v1/create/book"  }

    • Code: 400 Bad Request

    • 原因: {"title"}が128文字より長い

    • Body: { "message": "titleは128文字以内に入力してください。", "details": "uri=/v1/create/book"  }

    • Code: 400 Bad Request

    • 原因: {"authorId"}が文字 (数字に変換できない)

    • Body: { "message": "Objectパラメターのフィルドのデータ型に誤りがあります。", "details": "uri=/v1/create/book" }

    • Code: 400 Bad Request

    • 原因: {"authorId"}が負数

    • Body: { "message": "authorIDの値には、1以上の数字を入力してください。", "details": "uri=/v1/create/book"}

    • Code: 400 Bad Request

    • 原因: どれかのJsonキーがない時

    • Body: { "message": "Objectパラメターの必要なフィルドが設定されなかったため、Jsonリクエストがパースできませんでした。", "details": "uri=/v1/create/book"}


著者更新

著者を更新する リクエストJSONの設定されているキーのみDBを更新する。 設定されていないキーがDBのデータを上書きしない。

  • URL: /v1/update/author

  • Method: POST

  • リクエストJSON:

     {
        "authorId": 2,
        "name":  "山本太郎",
        "country": "USA"
     }
  • 成功レスポンス:
    • Code: 200 OK

    • Body:

       {
          "message": "更新に成功しました。",
          "success": true
       }   

      著者id (authorId)がDBに存在しない場合、以下のレスポンスになる

       {
          "message": "更新に失敗しました。",
          "success": false
       }
  • エラーレスポンス:
    • Code: 400 Bad Request

    • 原因: {"country"}が32文字より長い

    • Body: { "message": "countryは32文字以内に入力してください。", "details": "uri=/v1/update/author"}

    • Code: 400 Bad Request

    • 原因: {"name"}が64文字より長い

    • Body: { "message": "nameは64文字以内に入力してください。", "details": "uri=/v1/update/author"}

    • Code: 400 Bad Request

    • 原因: どれかのJsonキーがない時

    • Body: { "message": "Objectパラメターの必要なフィルドが設定されなかったため、Jsonリクエストがパースできませんでした。", "details": "uri=/v1/update/author"}

    • Code: 400 Bad Request

    • 原因: {"authorId"}が文字 (数字に変換できない)

    • Body: { "message": "Objectパラメターのフィルドのデータ型に誤りがあります。", "details": "uri=/v1/update/author"}

    • Code: 400 Bad Request

    • 原因: どれかのJsonキーがない時

    • Body: { "message": "Objectパラメターの必要なフィルドが設定されなかったため、Jsonリクエストがパースできませんでした。", "details": "uri=/v1/update/author"}


書籍更新

書籍を更新する リクエストJSONの設定されているキーのみDBを更新する。 設定されていないキーがDBのデータを上書きしない。

  • URL: /v1/update/book

  • Method: POST

  • リクエストJSON:

     {
	    "bookId": 1,
	    "title": "タイトル",
	    "authorId": 3
     }
  • 成功レスポンス:

  • Code: 200 OK

  • Body:

    	 {
         "message": "更新に成功しました。",
         "success": true
      }   

    書籍id (bookId)がDBに存在しない場合、以下のレスポンスになる

    	 {
         "message": "更新に失敗しました。",
         "success": false
      }

    設定した著者id (authorId)がDBに存在しない場合、以下のレスポンスになる

    	 {
         "message": "DBに存在しない著者で書籍の情報を更新することができません、先に著者を登録してください。",
         "success": false
      }
  • エラーレスポンス:

    • Code: 400 Bad Request

    • 原因: {"title"}が128文字より長い

    • Body: { "message": "titleは128文字以内に入力してください。", "details": "uri=/v1/update/book"  }

    • Code: 400 Bad Request

    • 原因: {"authorId"}が文字 (数字に変換できない)

    • Body: { "message": "Objectパラメターのフィルドのデータ型に誤りがあります。", "details": "uri=/v1/update/book" }

    • Code: 400 Bad Request

    • 原因: {"authorId"}が負数

    • Body: { "message": "authorIdの値には、1以上の数字を入力してください。", "details": "uri=/v1/update/book"}

    • Code: 400 Bad Request

    • 原因: {"bookId"}が文字 (数字に変換できない)

    • Body: { "message": "Objectパラメターのフィルドのデータ型に誤りがあります。", "details": "uri=/v1/update/book"}

    • Code: 400 Bad Request

    • 原因: {"bookId"}が負数

    • Body: { "message": "bookIdの値には、1以上の数字を入力してください。", "details": "uri=/v1/update/book"}

    • Code: 400 Bad Request

    • 原因: どれかのJsonキーがない時

    • Body: { "message": "Objectパラメターの必要なフィルドが設定されなかったため、Jsonリクエストがパースできませんでした。", "details": "uri=/v1/update/book"}


book-application-kotlin's People

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.