Giter Site home page Giter Site logo

yoshikyoto / lgtmoon Goto Github PK

View Code? Open in Web Editor NEW
100.0 4.0 7.0 21.88 MB

LGTM画像を簡単に作成できるアプリ

Home Page: https://lgtmoon.dev/

License: Other

Scala 44.96% Shell 0.05% HTML 16.37% JavaScript 10.49% CSS 0.57% Vue 22.67% Dockerfile 0.37% Procfile 0.06% Go 4.45%
imagemagick postgres heroku scala scalaplay2 play-framework

lgtmoon's Introduction

lgtmoon

キーワードを入力するだけで簡単にLGTM画像を生成できるWebアプリです。

LGTMoon is the web service to generate LGTM Image.

URL

https://lgtmoon.dev/

Dependency

  • sbt のバージョンは project/build.properties で確認できます
  • Scala のバージョンは build.sbt で確認できます
  • Play Framework のバージョンは project/plugins.sbt で確認できます
  • その他、Scala のライブラリ依存は build.sbt で確認できます
  • PostgreSQL 10.15
  • imagemagick
  • yarn
  • Vue.js

License

This application is licensed under the MIT License, see LICENSE.txt.

開発環境作成手順

Docker を使う場合

  • S3 を利用するため、AWS の認証情報を設定してください。方法は2つあります
    • PC の ~/.aws/credentials に lgtmoon_dev という provider を設定する
    • docker-compose.yml で、環境変数として AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY を指定する
      • 詳細は conf/application.conf を確認する
      • TODO: S3 環境も docker で用意する?
  • TODO: Google 検索について
# Docker のビルドをする
docker build -t lgtmoon .

# Docker を立ち上げる
# 立ち上がるまでに少し(数分)時間がかかります
docker-compose up -d

Dockerを使ったPostgreSQL環境の構築

docker-compose up -d

# 接続確認
# localhost の 5432 が docker の 5432 にプロキシされる設定になっています
# 詳しくは docker-compose.yml を見てください
psql -U postgres -h 127.0.0.1 lgtmoon --password

Dockerを使わない場合

利用したいデータベースに sql/init/1_create.sql を流してください。

例:

psql# create database lgtmoon owner postgres encoding 'UTF8';
$ psql lgtmoon < create.sql

PostgreSQLの操作などについてはwikiなどを見てください。

application.conf

基本的に conf/application.conf にはデフォルト値が設定されており、 ローカルでの開発では値を変更しなくて良いようになっています。

ただし、以下の設定だけ行ってください。

Google 検索の動作確認をする場合は、 Google の API を叩くのに必要な google.keygoogle.cx を設定してください。

  • TODO: この Google の処理をモックに置き換えられないか

LGTM 画像アップロードの動作確認をしたい場合、 S3 が利用できる AWS アカウントを設定する必要があります。

aws.provider に設定されている provider に対応した、 ~/.aws/credentials の設定が利用されます。

~/.aws/credentials の例

[lgtmoon_dev]
aws_access_key_id = XXXXX
aws_secret_access_key = YYYYYYYYYY
region = ap-northeast-1

Contribute

このコードはクリーンアーキテクチャーを意識して書かれています。 (参考

矢印のような依存関係になっています。例えば、Infra層はDomain層に依存しますが、 Domain層はInfra層に依存してはいけません。

クリーンアーキテクチャーのイメージ図

LGTMoonのクリーンアーキテクチャ構造

Presentation層/UseCase層

  • LGTMoonは小さなアプリケーションで、ログイン機能が無いため、Presentation層とUseCase層は区別されていません
  • app/controllers 以下がこの層にあたります
  • app/views も一応この層と言えます
  • app/actor も UseCase層のものですが、現状は app/actor の整備が進んでいないためどこの層にも属さないような立ち位置になっています

Domain層

  • app/image 以下がこの層にあたります
  • アプリケーションの核となる部分で、「このアプリケーションは何が可能なのか」といったことを表します

Infra層

  • app/storage, app/database, app/command, app/external, あたりがこの層といえます
  • ストレージやデータベースにアクセスする部分です
  • OSやサーバー環境などに依存する部分です

Tips

Slick Codegen

sql直下がSlick codegen のために必要なコードとなっています。 実行するには以下のコマンドを叩けばOkです。

$ cd sql
$ sbt run

Deploy to Heroku

$ heroku create <app-name>
$ cd frontend
$ yarn run build
$ yarn run release
$ cd ..
$ git add public
$ git commit

$ git checkout -b deploy

# create application.conf for heroku here

$ git commit application.conf
$ git push heroku deploy:master

lgtmoon's People

Contributors

kazuhitonakayama avatar korosuke613 avatar nao23 avatar yoshikyoto avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

lgtmoon's Issues

postを制限

  • enter連打で投稿できる問題の解消
  • 同一IPからは10分に1回とか
  • redis を使い、投稿数とか制限
  • 既に画像があるものはある程度制限
  • APIをFlickrに呼び替える
    • これをやる時はちゃんとリクエスト制限しないとまずい

LGTM文字の調整

  • 画像の明るさの関係で見づらいことがある
  • Looks Good For Me の文字を小さく追加
  • 文字間隔をもうちょい開ける

License missing from repo

This repo is missing a license. Without a license, all code is copyright the author and may not be used by anyone else.

Please use something like http://choosealicense.com/ to decide what license to use. I recommend MIT or GPL.

warningを消す

[info] Compiling 1 Scala source to /Users/yoshiyuki_sakamoto/lgtmoon/target/scala-2.11/classes...
[warn] /Users/yoshiyuki_sakamoto/lgtmoon/app/domain/image/ImageRepository.scala:34: value PostgresDriver in package driver is deprecated: Use object `slick.jdbc.PostgresProfile` instead of `slick.driver.PostgresDriver`
[warn]       id <- Image returning Image.map(_.id) += imageRow
[warn]             ^
[warn] /Users/yoshiyuki_sakamoto/lgtmoon/app/domain/image/ImageRepository.scala:34: value PostgresDriver in package driver is deprecated: Use object `slick.jdbc.PostgresProfile` instead of `slick.driver.PostgresDriver`
[warn]       id <- Image returning Image.map(_.id) += imageRow
[warn]                                      ^
[warn] /Users/yoshiyuki_sakamoto/lgtmoon/app/domain/image/ImageRepository.scala:48: value PostgresDriver in package driver is deprecated: Use object `slick.jdbc.PostgresProfile` instead of `slick.driver.PostgresDriver`
[warn]       .map(x => (x.status, x.bin))
[warn]           ^
[warn] /Users/yoshiyuki_sakamoto/lgtmoon/app/domain/image/ImageRepository.scala:47: value PostgresDriver in package driver is deprecated: Use object `slick.jdbc.PostgresProfile` instead of `slick.driver.PostgresDriver`
[warn]     val action = Image.filter(_.id === id)
[warn]                                 ^
[warn] /Users/yoshiyuki_sakamoto/lgtmoon/app/domain/image/ImageRepository.scala:47: value PostgresDriver in package driver is deprecated: Use object `slick.jdbc.PostgresProfile` instead of `slick.driver.PostgresDriver`
[warn]     val action = Image.filter(_.id === id)
[warn]                                        ^
[warn] /Users/yoshiyuki_sakamoto/lgtmoon/app/domain/image/ImageRepository.scala:47: value PostgresDriver in package driver is deprecated: Use object `slick.jdbc.PostgresProfile` instead of `slick.driver.PostgresDriver`
[warn]     val action = Image.filter(_.id === id)
[warn]                                    ^
[warn] /Users/yoshiyuki_sakamoto/lgtmoon/app/domain/image/ImageRepository.scala:68: value PostgresDriver in package driver is deprecated: Use object `slick.jdbc.PostgresProfile` instead of `slick.driver.PostgresDriver`
[warn]       .take(limit)
[warn]            ^
[warn] /Users/yoshiyuki_sakamoto/lgtmoon/app/domain/image/ImageRepository.scala:66: value PostgresDriver in package driver is deprecated: Use object `slick.jdbc.PostgresProfile` instead of `slick.driver.PostgresDriver`
[warn]     val action = Image.filter(_.status === AVAILABLE)
[warn]                                 ^
[warn] /Users/yoshiyuki_sakamoto/lgtmoon/app/domain/image/ImageRepository.scala:66: value PostgresDriver in package driver is deprecated: Use object `slick.jdbc.PostgresProfile` instead of `slick.driver.PostgresDriver`
[warn]     val action = Image.filter(_.status === AVAILABLE)
[warn]                                            ^
[warn] /Users/yoshiyuki_sakamoto/lgtmoon/app/domain/image/ImageRepository.scala:66: value PostgresDriver in package driver is deprecated: Use object `slick.jdbc.PostgresProfile` instead of `slick.driver.PostgresDriver`
[warn]     val action = Image.filter(_.status === AVAILABLE)
[warn]                                        ^
[warn] /Users/yoshiyuki_sakamoto/lgtmoon/app/domain/image/ImageRepository.scala:67: value PostgresDriver in package driver is deprecated: Use object `slick.jdbc.PostgresProfile` instead of `slick.driver.PostgresDriver`
[warn]       .sortBy(_.createdAt.desc)
[warn]                 ^
[warn] /Users/yoshiyuki_sakamoto/lgtmoon/app/domain/image/ImageRepository.scala:85: value PostgresDriver in package driver is deprecated: Use object `slick.jdbc.PostgresProfile` instead of `slick.driver.PostgresDriver`
[warn]     val action = Image.filter(_.id === id).result
[warn]                              ^
[warn] /Users/yoshiyuki_sakamoto/lgtmoon/app/domain/image/ImageRepository.scala:85: value PostgresDriver in package driver is deprecated: Use object `slick.jdbc.PostgresProfile` instead of `slick.driver.PostgresDriver`
[warn]     val action = Image.filter(_.id === id).result
[warn]                                 ^
[warn] /Users/yoshiyuki_sakamoto/lgtmoon/app/domain/image/ImageRepository.scala:85: value PostgresDriver in package driver is deprecated: Use object `slick.jdbc.PostgresProfile` instead of `slick.driver.PostgresDriver`
[warn]     val action = Image.filter(_.id === id).result
[warn]                                        ^
[warn] /Users/yoshiyuki_sakamoto/lgtmoon/app/domain/image/ImageRepository.scala:85: value PostgresDriver in package driver is deprecated: Use object `slick.jdbc.PostgresProfile` instead of `slick.driver.PostgresDriver`
[warn]     val action = Image.filter(_.id === id).result
[warn]                                    ^
[warn] 15 warnings found

適切なエラーメッセージを出す

レスポスに、ちゃんとメッセージを出して
「DBのエラーです。画像容量の限界かもしれません。@yoshiki_utakataまでご連絡ください」的なメッセージを出す。
message_html とかでいいかも

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.