souls 0.24.0 → 0.24.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (183) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/Gemfile.lock +1 -1
  4. data/api_v0.0.1.tar.gz +0 -0
  5. data/apps/api/.env.sample +7 -0
  6. data/apps/api/.gitignore +32 -0
  7. data/apps/api/.irbrc +1 -0
  8. data/apps/api/.rspec +3 -0
  9. data/apps/api/.rubocop.yml +132 -0
  10. data/apps/api/.ruby-version +1 -0
  11. data/apps/api/CODE_OF_CONDUCT.md +74 -0
  12. data/apps/api/Dockerfile +16 -0
  13. data/apps/api/Dockerfile.dev +17 -0
  14. data/apps/api/Gemfile +50 -0
  15. data/apps/api/Gemfile.lock +412 -0
  16. data/apps/api/LICENSE.txt +67 -0
  17. data/apps/api/Procfile +2 -0
  18. data/apps/api/Procfile.dev +2 -0
  19. data/apps/api/README.md +37 -0
  20. data/apps/api/Rakefile +5 -0
  21. data/apps/api/app.rb +114 -0
  22. data/apps/api/app/engines/notification_engine.rb +5 -0
  23. data/apps/api/app/graphql/mutations/.keep +0 -0
  24. data/apps/api/app/graphql/mutations/base/article/create_article.rb +30 -0
  25. data/apps/api/app/graphql/mutations/base/article/delete_article.rb +17 -0
  26. data/apps/api/app/graphql/mutations/base/article/destroy_delete_article.rb +17 -0
  27. data/apps/api/app/graphql/mutations/base/article/update_article.rb +30 -0
  28. data/apps/api/app/graphql/mutations/base/article_category/create_article_category.rb +21 -0
  29. data/apps/api/app/graphql/mutations/base/article_category/delete_article_category.rb +17 -0
  30. data/apps/api/app/graphql/mutations/base/article_category/destroy_delete_article_category.rb +17 -0
  31. data/apps/api/app/graphql/mutations/base/article_category/update_article_category.rb +21 -0
  32. data/apps/api/app/graphql/mutations/base/user/create_user.rb +31 -0
  33. data/apps/api/app/graphql/mutations/base/user/delete_user.rb +17 -0
  34. data/apps/api/app/graphql/mutations/base/user/destroy_delete_user.rb +17 -0
  35. data/apps/api/app/graphql/mutations/base/user/update_user.rb +31 -0
  36. data/apps/api/app/graphql/mutations/base_mutation.rb +65 -0
  37. data/apps/api/app/graphql/mutations/managers/user_manager/add_user_role.rb +22 -0
  38. data/apps/api/app/graphql/mutations/managers/user_manager/remove_user_role.rb +22 -0
  39. data/apps/api/app/graphql/mutations/managers/user_manager/sign_in_user.rb +45 -0
  40. data/apps/api/app/graphql/queries/article.rb +13 -0
  41. data/apps/api/app/graphql/queries/article_categories.rb +11 -0
  42. data/apps/api/app/graphql/queries/article_category.rb +13 -0
  43. data/apps/api/app/graphql/queries/articles.rb +11 -0
  44. data/apps/api/app/graphql/queries/base_query.rb +12 -0
  45. data/apps/api/app/graphql/queries/me.rb +11 -0
  46. data/apps/api/app/graphql/queries/user.rb +13 -0
  47. data/apps/api/app/graphql/queries/users.rb +11 -0
  48. data/apps/api/app/graphql/resolvers/article_category_search.rb +41 -0
  49. data/apps/api/app/graphql/resolvers/article_search.rb +57 -0
  50. data/apps/api/app/graphql/resolvers/base.rb +17 -0
  51. data/apps/api/app/graphql/resolvers/user_search.rb +63 -0
  52. data/apps/api/app/graphql/souls_api_schema.rb +43 -0
  53. data/apps/api/app/graphql/types/.keep +0 -0
  54. data/apps/api/app/graphql/types/article_category_type.rb +12 -0
  55. data/apps/api/app/graphql/types/article_type.rb +30 -0
  56. data/apps/api/app/graphql/types/base/base_argument.rb +4 -0
  57. data/apps/api/app/graphql/types/base/base_enum.rb +4 -0
  58. data/apps/api/app/graphql/types/base/base_field.rb +5 -0
  59. data/apps/api/app/graphql/types/base/base_input_object.rb +5 -0
  60. data/apps/api/app/graphql/types/base/base_interface.rb +7 -0
  61. data/apps/api/app/graphql/types/base/base_object.rb +6 -0
  62. data/apps/api/app/graphql/types/base/base_scalar.rb +4 -0
  63. data/apps/api/app/graphql/types/base/base_union.rb +4 -0
  64. data/apps/api/app/graphql/types/base/mutation_type.rb +26 -0
  65. data/apps/api/app/graphql/types/base/query_type.rb +18 -0
  66. data/apps/api/app/graphql/types/connections/article_category_connection.rb +3 -0
  67. data/apps/api/app/graphql/types/connections/article_connection.rb +3 -0
  68. data/apps/api/app/graphql/types/connections/base_connection.rb +14 -0
  69. data/apps/api/app/graphql/types/connections/user_connection.rb +3 -0
  70. data/apps/api/app/graphql/types/edges/article_category_edge.rb +5 -0
  71. data/apps/api/app/graphql/types/edges/article_edge.rb +5 -0
  72. data/apps/api/app/graphql/types/edges/base_edge.rb +4 -0
  73. data/apps/api/app/graphql/types/edges/user_edge.rb +5 -0
  74. data/apps/api/app/graphql/types/user_type.rb +24 -0
  75. data/apps/api/app/models/article.rb +4 -0
  76. data/apps/api/app/models/article_category.rb +3 -0
  77. data/apps/api/app/models/user.rb +19 -0
  78. data/apps/api/app/policies/application_policy.rb +40 -0
  79. data/apps/api/app/policies/article_category_policy.rb +31 -0
  80. data/apps/api/app/policies/article_policy.rb +31 -0
  81. data/apps/api/app/policies/user_policy.rb +35 -0
  82. data/apps/api/app/utils/association_loader.rb +50 -0
  83. data/apps/api/app/utils/fire_store.rb +9 -0
  84. data/apps/api/app/utils/firebase_id_token.rb +4 -0
  85. data/apps/api/app/utils/json_web_token.rb +13 -0
  86. data/apps/api/app/utils/record_loader.rb +10 -0
  87. data/apps/api/app/utils/souls_helper.rb +18 -0
  88. data/apps/api/cloudbuild.yml +32 -0
  89. data/apps/api/config.ru +17 -0
  90. data/apps/api/config/database.yml +33 -0
  91. data/apps/api/config/souls.rb +10 -0
  92. data/apps/api/constants/areas.rb +71 -0
  93. data/apps/api/constants/column_name_ja.rb +27 -0
  94. data/apps/api/db/migrate/20200006095538_create_users.rb +30 -0
  95. data/apps/api/db/migrate/20200712180236_create_article_categories.rb +12 -0
  96. data/apps/api/db/migrate/20200714215521_create_articles.rb +22 -0
  97. data/apps/api/db/schema.rb +78 -0
  98. data/apps/api/db/seeds.rb +44 -0
  99. data/apps/api/github/workflows/delivery.yml +81 -0
  100. data/apps/api/log/.keep +0 -0
  101. data/apps/api/spec/factories/article_categories.rb +9 -0
  102. data/apps/api/spec/factories/articles.rb +17 -0
  103. data/apps/api/spec/factories/users.rb +23 -0
  104. data/apps/api/spec/models/article_category_spec.rb +7 -0
  105. data/apps/api/spec/models/article_spec.rb +7 -0
  106. data/apps/api/spec/models/user_spec.rb +7 -0
  107. data/apps/api/spec/mutations/base/article_category_spec.rb +46 -0
  108. data/apps/api/spec/mutations/base/article_spec.rb +70 -0
  109. data/apps/api/spec/mutations/base/user_spec.rb +76 -0
  110. data/apps/api/spec/policies/article_category_policy_spec.rb +25 -0
  111. data/apps/api/spec/policies/article_policy_spec.rb +25 -0
  112. data/apps/api/spec/policies/user_policy_spec.rb +5 -0
  113. data/apps/api/spec/queries/article_category_spec.rb +39 -0
  114. data/apps/api/spec/queries/article_spec.rb +53 -0
  115. data/apps/api/spec/queries/user_spec.rb +59 -0
  116. data/apps/api/spec/resolvers/article_category_search_spec.rb +54 -0
  117. data/apps/api/spec/resolvers/article_search_spec.rb +68 -0
  118. data/apps/api/spec/resolvers/user_search_spec.rb +74 -0
  119. data/apps/api/spec/spec_helper.rb +110 -0
  120. data/apps/api/tmp/.keep +0 -0
  121. data/apps/worker/.env.sample +9 -0
  122. data/apps/worker/.gitignore +32 -0
  123. data/apps/worker/.irbrc +1 -0
  124. data/apps/worker/.rspec +3 -0
  125. data/apps/worker/.rubocop.yml +132 -0
  126. data/apps/worker/.ruby-version +1 -0
  127. data/apps/worker/CODE_OF_CONDUCT.md +74 -0
  128. data/apps/worker/Dockerfile +16 -0
  129. data/apps/worker/Dockerfile.dev +17 -0
  130. data/apps/worker/Gemfile +49 -0
  131. data/apps/worker/Gemfile.lock +396 -0
  132. data/apps/worker/LICENSE.txt +67 -0
  133. data/apps/worker/Procfile +1 -0
  134. data/apps/worker/Procfile.dev +1 -0
  135. data/apps/worker/README.md +37 -0
  136. data/apps/worker/Rakefile +5 -0
  137. data/apps/worker/app.rb +101 -0
  138. data/apps/worker/app/engines/notification_engine.rb +5 -0
  139. data/apps/worker/app/graphql/mutations/.keep +0 -0
  140. data/apps/worker/app/graphql/mutations/base_mutation.rb +16 -0
  141. data/apps/worker/app/graphql/mutations/workers/send_user_mail_job.rb +31 -0
  142. data/apps/worker/app/graphql/souls_api_schema.rb +43 -0
  143. data/apps/worker/app/graphql/types/.keep +0 -0
  144. data/apps/worker/app/graphql/types/base/base_argument.rb +4 -0
  145. data/apps/worker/app/graphql/types/base/base_enum.rb +4 -0
  146. data/apps/worker/app/graphql/types/base/base_field.rb +5 -0
  147. data/apps/worker/app/graphql/types/base/base_input_object.rb +5 -0
  148. data/apps/worker/app/graphql/types/base/base_interface.rb +7 -0
  149. data/apps/worker/app/graphql/types/base/base_object.rb +5 -0
  150. data/apps/worker/app/graphql/types/base/base_scalar.rb +4 -0
  151. data/apps/worker/app/graphql/types/base/base_union.rb +4 -0
  152. data/apps/worker/app/graphql/types/base/mutation_type.rb +12 -0
  153. data/apps/worker/app/graphql/types/base/query_type.rb +6 -0
  154. data/apps/worker/app/models/article.rb +4 -0
  155. data/apps/worker/app/models/article_category.rb +3 -0
  156. data/apps/worker/app/models/user.rb +19 -0
  157. data/apps/worker/app/utils/fire_store.rb +9 -0
  158. data/apps/worker/app/utils/souls_helper.rb +96 -0
  159. data/apps/worker/cloudbuild.yml +32 -0
  160. data/apps/worker/config.ru +17 -0
  161. data/apps/worker/config/database.yml +33 -0
  162. data/apps/worker/config/souls.rb +10 -0
  163. data/apps/worker/db/migrate/20200006095538_create_users.rb +30 -0
  164. data/apps/worker/db/migrate/20200712180236_create_article_categories.rb +12 -0
  165. data/apps/worker/db/migrate/20200714215521_create_articles.rb +22 -0
  166. data/apps/worker/db/schema.rb +78 -0
  167. data/apps/worker/db/seeds.rb +44 -0
  168. data/apps/worker/github/workflows/delivery.yml +81 -0
  169. data/apps/worker/log/.keep +0 -0
  170. data/apps/worker/spec/factories/article_categories.rb +9 -0
  171. data/apps/worker/spec/factories/articles.rb +17 -0
  172. data/apps/worker/spec/factories/users.rb +23 -0
  173. data/apps/worker/spec/models/article_category_spec.rb +7 -0
  174. data/apps/worker/spec/models/article_spec.rb +7 -0
  175. data/apps/worker/spec/models/user_spec.rb +7 -0
  176. data/apps/worker/spec/spec_helper.rb +110 -0
  177. data/apps/worker/tmp/.keep +0 -0
  178. data/exe/souls +0 -2
  179. data/lib/souls.rb +0 -18
  180. data/lib/souls/init.rb +1 -1
  181. data/lib/souls/version.rb +1 -1
  182. data/souls_api2.tar.gz +0 -0
  183. metadata +176 -1
@@ -0,0 +1,31 @@
1
+ class ArticlePolicy < ApplicationPolicy
2
+ def show?
3
+ true
4
+ end
5
+
6
+ def index?
7
+ true
8
+ end
9
+
10
+ def create?
11
+ user_permissions?
12
+ end
13
+
14
+ def update?
15
+ user_permissions?
16
+ end
17
+
18
+ def delete?
19
+ admin_permissions?
20
+ end
21
+
22
+ private
23
+
24
+ def user_permissions?
25
+ @user.master? or @user.admin? or @user.user?
26
+ end
27
+
28
+ def admin_permissions?
29
+ @user.master? or @user.admin?
30
+ end
31
+ end
@@ -0,0 +1,35 @@
1
+ class UserPolicy < ApplicationPolicy
2
+ def show?
3
+ true
4
+ end
5
+
6
+ def index?
7
+ true
8
+ end
9
+
10
+ def create?
11
+ user_permissions?
12
+ end
13
+
14
+ def update?
15
+ user_permissions?
16
+ end
17
+
18
+ def delete?
19
+ admin_permissions?
20
+ end
21
+
22
+ private
23
+
24
+ def user_permissions?
25
+ @user.user? or @user.admin? or @user.master?
26
+ end
27
+
28
+ def admin_permissions?
29
+ @user.master? or @user.admin?
30
+ end
31
+
32
+ def update_user_role?
33
+ @user.master?
34
+ end
35
+ end
@@ -0,0 +1,50 @@
1
+ class AssociationLoader < GraphQL::Batch::Loader
2
+ def self.validate(model, association_name)
3
+ new(model, association_name)
4
+ nil
5
+ end
6
+
7
+ def initialize(model, association_name)
8
+ super()
9
+ @model = model
10
+ @association_name = association_name
11
+ validate
12
+ end
13
+
14
+ def load(record)
15
+ raise(TypeError, "#{@model} loader can't load association for #{record.class}") unless record.is_a?(@model)
16
+ return Promise.resolve(read_association(record)) if association_loaded?(record)
17
+
18
+ super
19
+ end
20
+
21
+ # We want to load the associations on all records, even if they have the same id
22
+ def cache_key(record)
23
+ record.object_id
24
+ end
25
+
26
+ def perform(records)
27
+ preload_association(records)
28
+ records.each { |record| fulfill(record, read_association(record)) }
29
+ end
30
+
31
+ private
32
+
33
+ def validate
34
+ return if @model.reflect_on_association(@association_name)
35
+
36
+ raise(ArgumentError, "No association #{@association_name} on #{@model}")
37
+ end
38
+
39
+ def preload_association(records)
40
+ ::ActiveRecord::Associations::Preloader.new.preload(records, @association_name)
41
+ end
42
+
43
+ def read_association(record)
44
+ record.public_send(@association_name)
45
+ end
46
+
47
+ def association_loaded?(record)
48
+ record.association(@association_name).loaded?
49
+ end
50
+ end
@@ -0,0 +1,9 @@
1
+ module FireStore
2
+ def self.log(title: "error", message: "type error!")
3
+ Time.zone = "Asia/Tokyo"
4
+ time = Time.zone.now.strftime("%F-%H-%M-%S")
5
+ firestore = Google::Cloud::Firestore.new(project_id: "usmef-japan-trade")
6
+ doc_ref = firestore.doc("Log/#{time}")
7
+ doc_ref.set({ title: title, message: message, created_at: time })
8
+ end
9
+ end
@@ -0,0 +1,4 @@
1
+ FirebaseIdToken.configure do |config|
2
+ config.project_ids = ["souls-app"]
3
+ config.redis = Redis.new
4
+ end
@@ -0,0 +1,13 @@
1
+ module JsonWebToken
2
+ SECRET_KEY = ENV["SECRET_KEY_BASE"] || ""
3
+ private_constant :SECRET_KEY
4
+ def self.encode(payload, exp = 24.hours.from_now)
5
+ exp.to_i.zero? ? payload.delete(:exp) : payload[:exp] = exp.to_i
6
+ JWT.encode(payload, SECRET_KEY)
7
+ end
8
+
9
+ def self.decode(token)
10
+ decoded = JWT.decode(token, SECRET_KEY)[0]
11
+ HashWithIndifferentAccess.new(decoded)
12
+ end
13
+ end
@@ -0,0 +1,10 @@
1
+ class RecordLoader < GraphQL::Batch::Loader
2
+ def initialize(model)
3
+ @model = model
4
+ end
5
+
6
+ def perform(ids)
7
+ @model.where(id: ids).each { |record| fulfill(record.id, record) }
8
+ ids.each { |id| fulfill(id, nil) unless fulfilled?(id) }
9
+ end
10
+ end
@@ -0,0 +1,18 @@
1
+ module SoulsHelper
2
+ def self.pubsub_queue(topic_name: "seino-schedule-scraper", message: "text!")
3
+ pubsub = Google::Cloud::Pubsub.new(project: ENV["PROJECT_ID"])
4
+ topic = pubsub.topic(topic_name)
5
+ topic.publish(message)
6
+ end
7
+
8
+ def self.get_tables
9
+ path = "./db/schema.rb"
10
+ tables = []
11
+ File.open(path, "r") do |f|
12
+ f.each_line.with_index do |line, _i|
13
+ tables << line.split("\"")[1] if line.include?("create_table")
14
+ end
15
+ end
16
+ tables
17
+ end
18
+ end
@@ -0,0 +1,32 @@
1
+ steps:
2
+ - name: gcr.io/cloud-builders/docker
3
+ args:
4
+ - image
5
+ - build
6
+ - -t
7
+ - asia.gcr.io/$PROJECT_ID/$APP_NAME
8
+ - .
9
+
10
+ - name: gcr.io/cloud-builders/docker
11
+ args:
12
+ - image
13
+ - push
14
+ - asia.gcr.io/$PROJECT_ID/$APP_NAME
15
+
16
+ - name: gcr.io/cloud-builders/gcloud
17
+ args:
18
+ - run
19
+ - deploy
20
+ - $APP_NAME
21
+ - --image=asia.gcr.io/$PROJECT_ID/$APP_NAME
22
+ - --platform=managed
23
+ - --region=asia-northeast1
24
+ - --allow-unauthenticated
25
+ - --memory=2048Mi
26
+ - --concurrency=80
27
+ - --port=8080
28
+ - --set-cloudsql-instances=$APP_NAME:asia-northeast1:$APP_NAME-db
29
+
30
+ timeout: 1600s
31
+ options:
32
+ machineType: N1_HIGHCPU_8
@@ -0,0 +1,17 @@
1
+ require "./app"
2
+ require "rack/cors"
3
+ require "graphql_playground"
4
+
5
+ map "/playground" do
6
+ use GraphQLPlayground, endpoint: "/endpoint"
7
+ end
8
+
9
+ run SoulsApi
10
+
11
+ use Rack::Cors do
12
+ allowed_headers = %i[get post put patch delete options head]
13
+ allow do
14
+ origins "*"
15
+ resource "*", headers: :any, methods: allowed_headers
16
+ end
17
+ end
@@ -0,0 +1,33 @@
1
+ default: &default
2
+ adapter: postgresql
3
+ encoding: utf8
4
+ port: 5432
5
+
6
+ development:
7
+ <<: *default
8
+ username: postgres
9
+ password: postgres
10
+ database: souls-api-dev
11
+ host: localhost
12
+ port: 5433
13
+
14
+ production:
15
+ <<: *default
16
+ username: <%= ENV.fetch("DB_USER") { "" } %>
17
+ database: souls_api_production
18
+ password: <%= ENV.fetch("DB_PW") { "" } %>
19
+ host: <%= ENV.fetch("DB_HOST") { "" } %>
20
+ pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
21
+
22
+
23
+ ## Use local docker postgresql13
24
+ ## `souls i run_psql` will create psql container
25
+
26
+ test:
27
+ <<: *default
28
+ username: postgres
29
+ password: postgres
30
+ database: souls-api-test
31
+ host: localhost
32
+ port: 5433
33
+
@@ -0,0 +1,10 @@
1
+ require "souls"
2
+ Souls.configure do |config|
3
+ config.app = "souls-api"
4
+ config.project_id = "souls-api"
5
+ config.strain = "api"
6
+ config.api_repo = "elsoul/souls_api"
7
+ config.worker_repo = "elsoul/souls_worker"
8
+ config.worker_endpoint = "https://worker.com"
9
+ config.fixed_gems = []
10
+ end
@@ -0,0 +1,71 @@
1
+ module Constants
2
+ def self.areas
3
+ # 参考URL 西濃運輸|カンガルー宅急便運賃表
4
+ # http://stc.deliveryseino.jp/unchin/unchin.20191001.pdf
5
+ {
6
+ "北海道": ["北海道"],
7
+ "北東北": %w[青森 岩手 秋田],
8
+ "南東北": %w[宮城 山形 福島],
9
+ "関東": %w[栃木 群馬 新潟 茨城 千葉 東京 神奈川 山梨],
10
+ "中部": %w[富山 石川 福井 長野 静岡 愛知 三重 岐阜],
11
+ "近畿": %w[滋賀 京都 大阪 奈良 和歌山 兵庫],
12
+ "中国": %w[鳥取 岡山 島根 広島 山口],
13
+ "四国": %w[香川 徳島 愛媛 高知],
14
+ "北九州": %w[福岡 大分 長崎 佐賀],
15
+ "南九州": %w[宮崎 熊本 鹿児島],
16
+ "沖縄": ["沖縄"]
17
+ }
18
+ end
19
+
20
+ def self.prefectures
21
+ %w[
22
+ 北海道
23
+ 青森県
24
+ 岩手県
25
+ 宮城県
26
+ 秋田県
27
+ 山形県
28
+ 福島県
29
+ 茨城県
30
+ 栃木県
31
+ 群馬県
32
+ 埼玉県
33
+ 千葉県
34
+ 東京都
35
+ 神奈川県
36
+ 新潟県
37
+ 富山県
38
+ 石川県
39
+ 福井県
40
+ 山梨県
41
+ 長野県
42
+ 岐阜県
43
+ 静岡県
44
+ 愛知県
45
+ 三重県
46
+ 滋賀県
47
+ 京都府
48
+ 大阪府
49
+ 兵庫県
50
+ 奈良県
51
+ 和歌山県
52
+ 鳥取県
53
+ 島根県
54
+ 岡山県
55
+ 広島県
56
+ 山口県
57
+ 徳島県
58
+ 香川県
59
+ 愛媛県
60
+ 高知県
61
+ 福岡県
62
+ 佐賀県
63
+ 長崎県
64
+ 熊本県
65
+ 大分県
66
+ 宮崎県
67
+ 鹿児島県
68
+ 沖縄県
69
+ ]
70
+ end
71
+ end
@@ -0,0 +1,27 @@
1
+ module Constants
2
+ def self.user_columns
3
+ {
4
+ id: "ID",
5
+ uid: "UID",
6
+ username: "ユーザー名",
7
+ screen_name: "表示名",
8
+ last_name: "苗字",
9
+ first_name: "名前",
10
+ last_name_kanji: "苗字(漢字)",
11
+ first_name_kanji: "名前(漢字)",
12
+ last_name_kana: "苗字(カナ)",
13
+ first_name_kana: "名前(カナ)",
14
+ email: "メール",
15
+ tel: "電話番号",
16
+ icon_url: "アイコンURL",
17
+ birthday: "誕生日",
18
+ gender: "性別",
19
+ lang: "言語",
20
+ category: "カテゴリー",
21
+ roles_mask: "ユーザー権限",
22
+ is_deleted: "削除フラグ",
23
+ created_at: "作成日時",
24
+ updated_at: "更新日時"
25
+ }
26
+ end
27
+ end
@@ -0,0 +1,30 @@
1
+ class CreateUsers < ActiveRecord::Migration[6.1]
2
+ def change
3
+ create_table :users do |t|
4
+ t.string :uid, null: false, unique: true
5
+ t.string :username, null: false, default: ""
6
+ t.string :screen_name, null: false, default: ""
7
+ t.string :last_name, null: false, default: ""
8
+ t.string :first_name, null: false, default: ""
9
+ t.string :last_name_kanji, null: false, default: ""
10
+ t.string :first_name_kanji, null: false, default: ""
11
+ t.string :last_name_kana, null: false, default: ""
12
+ t.string :first_name_kana, null: false, default: ""
13
+ t.string :email, null: false, unique: true
14
+ t.string :tel, null: false, default: ""
15
+ t.string :icon_url, null: false, default: ""
16
+ t.string :birthday, null: false, default: ""
17
+ t.string :gender, null: false, default: ""
18
+ t.string :lang, null: false, default: "ja"
19
+ t.string :category, null: false, default: "user"
20
+ t.integer :roles_mask, null: false, default: 1
21
+ t.boolean :is_deleted, null: false, default: false
22
+ t.timestamps
23
+ end
24
+ add_index :users, :uid
25
+ add_index :users, :screen_name
26
+ add_index :users, :email, unique: true
27
+ add_index :users, :username
28
+ add_index :users, :is_deleted
29
+ end
30
+ end
@@ -0,0 +1,12 @@
1
+ class CreateArticleCategories < ActiveRecord::Migration[6.1]
2
+ def change
3
+ create_table :article_categories do |t|
4
+ t.string :name, null: false
5
+ t.text :tags, array: true, default: []
6
+ t.boolean :is_deleted, null: false, default: false
7
+ t.timestamps
8
+ end
9
+ add_index :article_categories, :name
10
+ add_index :article_categories, :is_deleted
11
+ end
12
+ end
@@ -0,0 +1,22 @@
1
+ class CreateArticles < ActiveRecord::Migration[6.1]
2
+ def change
3
+ create_table :articles do |t|
4
+ t.belongs_to :user
5
+ t.string :title, null: false, unique: true
6
+ t.text :body, null: false, default: ""
7
+ t.string :thumnail_url, null: false, default: ""
8
+ t.datetime :public_date, null: false, default: Time.now + 30.days
9
+ t.belongs_to :article_category, null: false
10
+ t.boolean :is_public, default: false, null: false
11
+ t.boolean :just_created, default: true, null: false
12
+ t.string :slag, null: false, unique: true
13
+ t.text :tags, array: true, default: []
14
+ t.boolean :is_deleted, null: false, default: false
15
+ t.timestamps
16
+ end
17
+ add_index :articles, :slag, unique: true
18
+ add_index :articles, :title, unique: true
19
+ add_index :articles, :is_public
20
+ add_index :articles, :is_deleted
21
+ end
22
+ end