Coder Social home page Coder Social logo

cypher-book's Introduction

Stats

GitHub stats Most Used Languages

資格 Certifications

  • 基本情報技術者 Fundamental Information Technology Engineer
  • 応用情報技術者 Applied Information Technology Engineer
  • Oracle Certified Java Programmer, Silver SE 8
  • Oracle Certified Java Programmer, Gold SE 8
  • AWS Certified Solutions Architect - Associate
  • AWS Certified Developer - Associate
  • AWS Certified SysOps Administrator - Associate
  • Certified ScrumMaster
  • Professional Scrum Master I
  • 日本安全食料料理協会コーヒーソムリエ Coffee Sommelier
  • 食品衛生責任者 Food Sanitation Manager
  • STARTS Open Water Diver

登壇 Presentations

記事 Posts


Buy me a coffee #buymeacoffee

cypher-book's People

Watchers

 avatar

cypher-book's Issues

No.1 Databaseの準備

  1. docker-composeでpostgresqlを用意してください
    docker-composeを利用します (dockerが難しい場合は模範解答を提供します)
  2. 起動時にtable createと初期データをセットしてください
  3. table 定義 (schema名はなんでも🙆‍♂️)
CREATE TABLE main.book(
  isbn varchar(13) NOT NULL,
  title varchar(100) NOT NULL,
  author varchar(100) NOT NULL,
  publisher varchar(100) NOT NULL,
  price integer NOT NULL,
  created_at timestamp NOT NULL,
  updated_at timestamp NOT NULL,
  PRIMARY KEY (isbn)
)

No.7 Database 例外ハンドリング

  1. List, Get処理でDatabaseAccessExceptionが発生した場合の処理を実装してください
  2. HTTP status 500にしてJSONを返却してください。
    例: {"reason":"BookRepository#findでエラーが発生しました"}

おまけNo.3 認証認可

  1. Insert, Update処理に対して指定されたユーザ以外は処理を行えないようなセキュリティ機構を実装してください
    a. 実装、処理方法、利用するリソースはすべて自由です 🙆‍♂️

No.10 Request Logger実装

Requestで受け取った情報 (Request Header, Method, URI, Body) をdebug logに出力してください

おまけNo.5 WebFlux

  1. 課題で作ったAPIをWebFluxで実装し直します
  2. BlockHound を入れて、エラーにならなければ 🙆‍♂️
  3. Controllerはアノテーション形式でもfunction形式でも🙆‍♂️

No.8 Insert実装

新規の書籍を登録する処理を自由に実装してください

No.6 Value Object

  1. isbnのvalue objectを作成してください。換言すると、domain layerにIsbn Classを作ってください、という意味です
  2. #5 で作成したGet処理のリクエストisbn に、チェックディジット計算のチェックを導入してください。
    チェックディジットが不正の場合は HTTP status 400にしてJsonを返却してください
  3. isbnのチェックディジット計算仕様は適当に検索して拾ってください。例えばこことか
  4. チェックディジット計算のfunctionはJUnitで単体テストを書いてください

No.13 API Call

  1. Get時にBookのRatingとGenreを返すAPIをCallしてレスポンスに追加してください
    a. APIは自作してもMockを用意してもかまいません
    b. APIはISBNを受け取り、Rating, Genreを返します。例: { "rating": "4.5", "genre": "少年コミック" }
    c. API Callに失敗した場合、rating, genreをつけずに従来のGet処理のResponseを返すようにしてください

おまけNo.4 並列実行

  1. Get時のAPI CallとDB処理を並列実行してください
  2. この時点ではDB処理はBlocking IOになります。APIはNon-BlockingでもBlockingでも 🙆‍♂️

No.5 Get実装

  1. isbnを引数で受け取ってBookResponseを返却する処理を実装してください
  2. isbnは13桁の数字だけvalidとしてください
  3. dataが見つからない場合は HTTP status 404にして次のようなJSONを返却してください。
    例: {"reason":"No Book found. isbn=9784111111111"}

No.2 List 実装

  1. Databaseに登録されているデータをJsonで返却するlist処理を実装してください
  2. Database AccessにはJdbcTemplateを使ってください
  3. Databaseへの接続パスワードは環境変数で設定できるようにしてください
  4. データが存在しない場合は空List Jsonを返却してください。HTTP Statusは200を返却してください
  5. Database接続等の例外が発生した場合は HTTP Status 500でJsonを返却してください
  6. 実装イメージ (一部省略) この通りに作らなくてもOKです
└── src
    └── main
        └── kotlin
            └── com
                └── example
                    └── app
                        ├── ExampleApplication.kt
                        ├── repository
                        │   └── BookRepository.kt (JdbcTemplate実装を記述する)
                        └── web
                            ├── controller
                            │   └── BookController.kt
                            └── entity
                                └── Book.kt

No.3 Clean Architecture

  1. gradleをマルチプロジェクト構成にしてアプリケーションをクリーンアーキテクチャにしてください (難しい場合はヘルプします)
  2. DatabaseとのコミュニケーションとController Responseはdomain objectを使わずにそれぞれdtoを利用してください
  3. 構成
  • web (Controller / SpringBootApplication起動クラス)
  • domain (domain object)
  • infra (databaseとのコミュニケーション)
  • application (usecase / infraのinterface)
  1. 実装イメージ (一部省略 / class名などは適宜変更してください)
root
├── application
│   ├── build.gradle.kts
│   └── src
│       └── main
│           └── kotlin
│               └── com
│                   └── example
│                       └── app
│                           └── application
│                               ├── repository
│                               │   └── BookRepository.kt (BookRepositoryImplのInterface)
│                               └── usecase
│                                   └── FetchBook.kt (usecase. Controllerで利用する)
├── build.gradle.kts
├── domain
│   ├── build.gradle.kts
│   └── src.main.kotlin.com.example.app.domain.entity.Book.kt
│
├── infra
│   ├── build.gradle.kts
│   └── src
│       └── main
│           └── kotlin
│               └── com
│                   └── example
│                       └── app
│                           └── infra
│                               ├── entity
│                               │   └── Book.kt (Database用のDTO)
│                               └── repository
│                                   └── BookRepositoryImpl.kt
├── settings.gradle.kts
└── web
    ├── build.gradle.kts
    └── src
        └── main
            ├── kotlin
            │   └── com
            │       └── example
            │           └── app
            │               ├── ExampleApplication.kt
            │               └── web
            │                   ├── controller
            │                   │   ├── BookController.kt
            │                   └── response
            │                       ├── BookResponse.kt (Response用のDTO)
            │                       └── ErrorResponse.kt
            └── resources
                └── application.yml

No.9 Update実装

書籍情報を更新する処理を自由に実装してください

No.11 custom validator

  1. publisherが 「ほげほげ書房」 のとき、priice < 1000 の商品は登録、更新できないようにしてください
    a. このvalidateはWeb Layerに実装してください

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.