From 9e90c4ec3bb0a93be4f74ed9f48311959cd0f98d Mon Sep 17 00:00:00 2001 From: nose221834 Date: Sun, 6 Apr 2025 22:32:27 +0900 Subject: [PATCH 001/285] =?UTF-8?q?feat:=20rubocup=E3=81=AEinstall?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/Gemfile | 11 +++++++---- api/Gemfile.lock | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/api/Gemfile b/api/Gemfile index 4f5ddf3ac..cf61e4d77 100644 --- a/api/Gemfile +++ b/api/Gemfile @@ -36,22 +36,25 @@ if ENV['PLATFORM'] != 'arm64-darwin' gem 'wkhtmltopdf-binary' end -gem 'slack-notifier' gem 'dotenv-rails' +gem 'slack-notifier' gem 'slack-ruby-client' group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console - gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] + gem 'byebug', platforms: %i[mri mingw x64_mingw] end group :development do gem 'listen', '~> 3.2' # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring + gem 'r2-oas' gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' - gem 'r2-oas' end # Windows does not include zoneinfo files, so bundle the tzinfo-data gem -gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] +gem 'tzinfo-data', platforms: %i[mingw mswin x64_mingw jruby] + +gem 'rubocop', require: false +gem 'rubocop-rails', require: false diff --git a/api/Gemfile.lock b/api/Gemfile.lock index 7e907f1e9..10f22c75d 100644 --- a/api/Gemfile.lock +++ b/api/Gemfile.lock @@ -60,6 +60,7 @@ GEM minitest (>= 5.1) tzinfo (~> 2.0) zeitwerk (~> 2.3) + ast (2.4.3) base64 (0.2.0) bcrypt (3.1.16) bootsnap (1.18.4) @@ -124,7 +125,10 @@ GEM concurrent-ruby (~> 1.0) jbuilder (2.11.2) activesupport (>= 5.0.0) + json (2.10.2) key_flatten (1.0.0) + language_server-protocol (3.17.0.4) + lint_roller (1.1.0) listen (3.5.1) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) @@ -148,7 +152,12 @@ GEM mini_portile2 (~> 2.5.0) racc (~> 1.4) orm_adapter (0.5.0) + parallel (1.26.3) + parser (3.3.7.4) + ast (~> 2.4.1) + racc pdfkit (0.8.5) + prism (1.4.0) puma (4.3.7) nio4r (~> 2.0) r2-oas (0.5.0) @@ -190,6 +199,7 @@ GEM method_source rake (>= 0.8.7) thor (~> 1.0) + rainbow (3.1.1) rake (13.0.3) rb-fsevent (0.10.4) rb-inotify (0.10.1) @@ -199,6 +209,27 @@ GEM actionpack (>= 5.0) railties (>= 5.0) rexml (3.4.1) + rubocop (1.75.2) + json (~> 2.3) + language_server-protocol (~> 3.17.0.2) + lint_roller (~> 1.1.0) + parallel (~> 1.10) + parser (>= 3.3.0.2) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 2.9.3, < 3.0) + rubocop-ast (>= 1.44.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 2.4.0, < 4.0) + rubocop-ast (1.44.0) + parser (>= 3.3.7.2) + prism (~> 1.4) + rubocop-rails (2.31.0) + activesupport (>= 4.2.0) + lint_roller (~> 1.1) + rack (>= 1.1) + rubocop (>= 1.75.0, < 2.0) + rubocop-ast (>= 1.38.0, < 2.0) + ruby-progressbar (1.13.0) ruby2_keywords (0.0.5) rubyzip (2.4.1) seed-fu (2.3.9) @@ -231,6 +262,9 @@ GEM thor (1.1.0) tzinfo (2.0.4) concurrent-ruby (~> 1.0) + unicode-display_width (3.1.4) + unicode-emoji (~> 4.0, >= 4.0.4) + unicode-emoji (4.0.4) warden (1.2.9) rack (>= 2.0.9) watir (7.3.0) @@ -259,6 +293,8 @@ DEPENDENCIES r2-oas rack-cors rails (~> 6.1.3.1) + rubocop + rubocop-rails seed-fu slack-notifier slack-ruby-client From 3992c9e5c74212d7e40baee7fc9764366b738bc5 Mon Sep 17 00:00:00 2001 From: nose221834 Date: Sun, 6 Apr 2025 22:33:08 +0900 Subject: [PATCH 002/285] chore: bundle exec rubocup -a --- .../controllers/announcements_controller.rb | 29 +- .../api/auth/registrations_controller.rb | 2 +- .../api/auth/sessions_controller.rb | 2 +- .../api/v1/announcements_api_controller.rb | 110 +- .../v1/assign_rental_items_api_controller.rb | 128 +- .../cooking_process_orders_api_controller.rb | 5 +- .../api/v1/current_user_api_controller.rb | 21 +- .../api/v1/dashboard_api_controller.rb | 100 +- .../api/v1/employees_api_controller.rb | 33 +- .../api/v1/fes_dates_api_controller.rb | 2 - .../api/v1/food_products_api_controller.rb | 55 +- .../api/v1/groups_api_controller.rb | 23 +- .../api/v1/order_infos_api_controller.rb | 10 +- .../v1/order_status_check_api_controller.rb | 113 +- .../api/v1/output_csv_controller.rb | 259 ++- .../api/v1/place_orders_api_controller.rb | 31 +- .../api/v1/power_orders_api_controller.rb | 29 +- .../api/v1/public_relations_api_controller.rb | 17 +- .../api/v1/purchase_lists_api_controller.rb | 46 +- .../api/v1/rental_items_api_controller.rb | 2 - .../api/v1/rental_orders_api_controller.rb | 97 +- .../api/v1/representatives_api_controller.rb | 55 +- .../v1/stage_common_options_api_controller.rb | 39 +- .../api/v1/stage_orders_api_controller.rb | 37 +- .../api/v1/stocker_items_api_controller.rb | 80 +- .../api/v1/sub_rep_api_controller.rb | 6 +- .../controllers/api/v1/users_controller.rb | 49 +- .../api/v1/venue_maps_api_controller.rb | 75 +- api/app/controllers/application_controller.rb | 36 +- .../assign_group_places_controller.rb | 29 +- .../assign_rental_items_controller.rb | 29 +- .../controllers/assign_stages_controller.rb | 29 +- .../controllers/contact_persons_controller.rb | 85 +- .../cooking_process_orders_controller.rb | 27 +- .../controllers/current_stocks_controller.rb | 29 +- api/app/controllers/employees_controller.rb | 29 +- api/app/controllers/fes_dates_controller.rb | 97 +- api/app/controllers/fes_years_controller.rb | 27 +- .../controllers/food_products_controller.rb | 29 +- .../group_categories_controller.rb | 30 +- .../group_identification_controller.rb | 30 +- api/app/controllers/groups_controller.rb | 34 +- api/app/controllers/memos_controller.rb | 42 +- api/app/controllers/news_controller.rb | 31 +- .../place_allow_lists_controller.rb | 29 +- .../controllers/place_number_controller.rb | 36 +- .../controllers/place_orders_controller.rb | 29 +- api/app/controllers/places_controller.rb | 29 +- .../controllers/power_orders_controller.rb | 29 +- api/app/controllers/print_pdf_controller.rb | 47 +- .../public_relations_controller.rb | 29 +- .../controllers/purchase_lists_controller.rb | 30 +- .../controllers/rentable_items_controller.rb | 29 +- .../rental_item_allow_lists_controller.rb | 29 +- .../controllers/rental_items_controller.rb | 29 +- .../controllers/rental_orders_controller.rb | 29 +- api/app/controllers/shops_controller.rb | 31 +- .../stage_common_options_controller.rb | 29 +- .../controllers/stage_number_controller.rb | 42 +- .../controllers/stage_orders_controller.rb | 34 +- api/app/controllers/stages_controller.rb | 31 +- .../controllers/stocker_items_controller.rb | 29 +- .../controllers/stocker_places_controller.rb | 29 +- api/app/controllers/sub_reps_controller.rb | 29 +- .../controllers/user_details_controller.rb | 39 +- .../user_page_settings_controller.rb | 30 +- api/app/controllers/users_controller.rb | 68 +- api/app/controllers/venue_maps_controller.rb | 30 +- api/app/models/announcement.rb | 35 +- api/app/models/assign_group_place.rb | 4 +- api/app/models/assign_rental_item.rb | 63 +- api/app/models/assign_stage.rb | 4 +- api/app/models/contact_person.rb | 2 +- api/app/models/cooking_process_order.rb | 20 +- api/app/models/employee.rb | 25 +- api/app/models/fes_date.rb | 6 +- api/app/models/fes_year.rb | 8 +- api/app/models/food_product.rb | 47 +- api/app/models/group.rb | 1944 +++++++++-------- api/app/models/group_category.rb | 6 +- api/app/models/place.rb | 38 +- api/app/models/place_allow_list.rb | 4 +- api/app/models/place_order.rb | 68 +- api/app/models/power_order.rb | 53 +- api/app/models/public_relation.rb | 2 +- api/app/models/purchase_list.rb | 69 +- api/app/models/rentable_item.rb | 4 +- api/app/models/rental_item.rb | 20 +- api/app/models/rental_item_allow_list.rb | 4 +- api/app/models/rental_order.rb | 53 +- api/app/models/shop.rb | 3 +- api/app/models/stage.rb | 12 +- api/app/models/stage_common_option.rb | 25 +- api/app/models/stage_order.rb | 85 +- api/app/models/stocker_item.rb | 63 +- api/app/models/stocker_place.rb | 6 +- api/app/models/sub_rep.rb | 34 +- api/app/models/user.rb | 164 +- api/app/models/user_detail.rb | 14 +- api/app/models/venue_map.rb | 2 +- .../assign_group_places/index.json.jbuilder | 2 +- .../assign_group_places/show.json.jbuilder | 2 +- .../assign_rental_items/index.json.jbuilder | 2 +- .../assign_rental_items/show.json.jbuilder | 2 +- .../assign_stages/_assign_stage.json.jbuilder | 3 +- .../views/assign_stages/index.json.jbuilder | 2 +- .../views/assign_stages/show.json.jbuilder | 2 +- api/app/views/employees/index.json.jbuilder | 2 +- api/app/views/employees/show.json.jbuilder | 2 +- .../food_products/_food_product.json.jbuilder | 3 +- .../views/food_products/index.json.jbuilder | 2 +- .../views/food_products/show.json.jbuilder | 2 +- api/app/views/groups/_group.json.jbuilder | 3 +- api/app/views/groups/index.json.jbuilder | 2 +- api/app/views/groups/show.json.jbuilder | 2 +- api/app/views/memos/index.json.jbuilder | 2 +- api/app/views/memos/show.json.jbuilder | 2 +- api/app/views/news/index.json.jbuilder | 2 +- api/app/views/news/show.json.jbuilder | 2 +- .../place_allow_lists/index.json.jbuilder | 2 +- .../place_allow_lists/show.json.jbuilder | 2 +- .../views/place_orders/index.json.jbuilder | 2 +- api/app/views/place_orders/show.json.jbuilder | 2 +- .../views/power_orders/index.json.jbuilder | 2 +- api/app/views/power_orders/show.json.jbuilder | 2 +- .../public_relations/index.json.jbuilder | 2 +- .../views/public_relations/show.json.jbuilder | 2 +- .../views/purchase_lists/index.json.jbuilder | 2 +- .../views/purchase_lists/show.json.jbuilder | 2 +- .../views/rentable_items/index.json.jbuilder | 2 +- .../views/rentable_items/show.json.jbuilder | 2 +- .../views/rental_orders/index.json.jbuilder | 2 +- .../views/rental_orders/show.json.jbuilder | 2 +- .../_stage_common_option.json.jbuilder | 3 +- .../stage_common_options/index.json.jbuilder | 2 +- .../stage_common_options/show.json.jbuilder | 2 +- .../stage_orders/_stage_order.json.jbuilder | 3 +- .../views/stage_orders/index.json.jbuilder | 2 +- api/app/views/stage_orders/show.json.jbuilder | 2 +- .../views/stocker_items/index.json.jbuilder | 2 +- .../views/stocker_items/show.json.jbuilder | 2 +- api/app/views/sub_reps/index.json.jbuilder | 2 +- api/app/views/sub_reps/show.json.jbuilder | 2 +- .../views/user_details/index.json.jbuilder | 2 +- api/app/views/user_details/show.json.jbuilder | 2 +- .../_user_page_setting.json.jbuilder | 3 +- .../user_page_settings/index.json.jbuilder | 2 +- .../user_page_settings/show.json.jbuilder | 2 +- api/bin/bundle | 44 +- api/bin/rails | 2 +- api/bin/rake | 2 +- api/config/application.rb | 24 +- api/config/environments/development.rb | 1 - api/config/environments/production.rb | 6 +- api/config/initializers/cors.rb | 6 +- api/config/initializers/devise_token_auth.rb | 10 +- api/config/puma.rb | 10 +- api/config/routes.rb | 302 ++- api/config/spring.rb | 8 +- api/db/fixtures/develop/announcement.rb | 13 +- api/db/fixtures/develop/assign_group_place.rb | 8 +- api/db/fixtures/develop/assign_rental_item.rb | 12 +- api/db/fixtures/develop/assign_stage.rb | 12 +- api/db/fixtures/develop/department.rb | 39 +- api/db/fixtures/develop/employee.rb | 12 +- api/db/fixtures/develop/fes_year_date.rb | 29 +- api/db/fixtures/develop/food_product.rb | 14 +- api/db/fixtures/develop/grade.rb | 36 +- api/db/fixtures/develop/group.rb | 211 +- api/db/fixtures/develop/group_category.rb | 17 +- api/db/fixtures/develop/memo.rb | 6 +- api/db/fixtures/develop/news.rb | 13 +- api/db/fixtures/develop/place.rb | 25 +- api/db/fixtures/develop/place_allow_list.rb | 1053 ++++----- api/db/fixtures/develop/place_order.rb | 14 +- api/db/fixtures/develop/power_order.rb | 16 +- api/db/fixtures/develop/purchase_list.rb | 18 +- api/db/fixtures/develop/rentable_item.rb | 10 +- api/db/fixtures/develop/rental_item.rb | 99 +- .../develop/rental_item_allow_list.rb | 123 +- api/db/fixtures/develop/rental_order.rb | 10 +- api/db/fixtures/develop/role.rb | 11 +- api/db/fixtures/develop/shop.rb | 255 +-- api/db/fixtures/develop/stage.rb | 13 +- .../fixtures/develop/stage_common_option.rb | 14 +- api/db/fixtures/develop/stage_order.rb | 28 +- api/db/fixtures/develop/stocker_item.rb | 30 +- api/db/fixtures/develop/stocker_place.rb | 139 +- api/db/fixtures/develop/stool_test.rb | 9 +- api/db/fixtures/develop/sub_rep.rb | 243 +-- api/db/fixtures/develop/user.rb | 1323 +++++------ api/db/fixtures/develop/user_detail.rb | 707 +++--- api/db/fixtures/develop/user_page_setting.rb | 54 +- api/db/fixtures/production/department.rb | 39 +- api/db/fixtures/production/fes_year_date.rb | 13 +- api/db/fixtures/production/grade.rb | 36 +- api/db/fixtures/production/group_category.rb | 17 +- api/db/fixtures/production/place.rb | 25 +- .../fixtures/production/place_allow_list.rb | 155 +- api/db/fixtures/production/rental_item.rb | 99 +- .../production/rental_item_allow_list.rb | 141 +- api/db/fixtures/production/role.rb | 11 +- api/db/fixtures/production/shop.rb | 264 +-- api/db/fixtures/production/stage.rb | 11 +- api/db/fixtures/production/stocker_place.rb | 65 +- api/db/fixtures/production/stool_test.rb | 9 +- api/db/fixtures/production/user.rb | 89 +- api/db/fixtures/production/user_detail.rb | 80 +- .../fixtures/production/user_page_setting.rb | 54 +- ...20152841_devise_token_auth_create_users.rb | 13 +- .../20240307061007_create_item_adjustments.rb | 3 +- ...522012844_modify_cooking_process_orders.rb | 2 +- api/db/schema.rb | 859 ++++---- api/db/user.rb | 111 +- .../application_cable/connection_test.rb | 2 +- .../announcements_controller_test.rb | 2 +- .../assign_group_places_controller_test.rb | 16 +- .../assign_rental_items_controller_test.rb | 16 +- .../assign_stages_controller_test.rb | 16 +- .../cooking_process_orders_controller_test.rb | 2 +- .../current_stocks_controller_test.rb | 10 +- .../controllers/employees_controller_test.rb | 16 +- .../food_products_controller_test.rb | 16 +- .../group_identification_controller_test.rb | 8 +- .../controllers/groups_controller_test.rb | 16 +- api/test/controllers/memos_controller_test.rb | 10 +- api/test/controllers/news_controller_test.rb | 10 +- .../place_allow_lists_controller_test.rb | 16 +- .../place_number_controller_test.rb | 12 +- .../place_orders_controller_test.rb | 16 +- .../power_orders_controller_test.rb | 16 +- .../public_relations_controller_test.rb | 18 +- .../purchase_lists_controller_test.rb | 16 +- .../rentable_items_controller_test.rb | 16 +- .../rental_orders_controller_test.rb | 16 +- .../stage_common_options_controller_test.rb | 16 +- .../stage_number_controller_test.rb | 2 +- .../stage_orders_controller_test.rb | 16 +- .../stocker_items_controller_test.rb | 16 +- .../controllers/sub_reps_controller_test.rb | 16 +- .../user_details_controller_test.rb | 16 +- .../user_page_settings_controller_test.rb | 16 +- .../controllers/venue_maps_controller_test.rb | 2 +- api/test/models/announcement_test.rb | 2 +- api/test/models/contact_person_test.rb | 2 +- api/test/models/cooking_process_order_test.rb | 2 +- api/test/models/current_stock_test.rb | 2 +- api/test/models/group_identification_test.rb | 2 +- api/test/models/item_adjustment_test.rb | 2 +- api/test/models/place_number_test.rb | 2 +- api/test/models/public_relation_test.rb | 2 +- api/test/models/stage_number_test.rb | 2 +- api/test/models/stool_test_test.rb | 2 +- api/test/models/venue_map_test.rb | 2 +- 254 files changed, 6521 insertions(+), 6846 deletions(-) diff --git a/api/app/controllers/announcements_controller.rb b/api/app/controllers/announcements_controller.rb index 13b1b5e54..64089f64f 100644 --- a/api/app/controllers/announcements_controller.rb +++ b/api/app/controllers/announcements_controller.rb @@ -1,5 +1,5 @@ class AnnouncementsController < ApplicationController - before_action :set_announcement, only: [:show, :update, :destroy] + before_action :set_announcement, only: %i[show update destroy] # GET /announcements # GET /announcements.json @@ -25,28 +25,29 @@ def create # PATCH/PUT /announcements/1.json def update @announcement.update(announcement_params) - render json: fmt(created, @announcement, "Updated announcement id = "+params[:id]) + render json: fmt(created, @announcement, 'Updated announcement id = ' + params[:id]) end # DELETE /announcements/1 # DELETE /announcements/1.json def destroy @announcement.destroy - render json: fmt(ok, [], "Deleted announcement = "+params[:id]) + render json: fmt(ok, [], 'Deleted announcement = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_announcement - if Announcement.exists?(params[:id]) - @announcement = Announcement.find(params[:id]) - else - render json: fmt(not_found, [], "Not found announcement = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def announcement_params - params.permit(:group_id, :message, :status, :id) + # Use callbacks to share common setup or constraints between actions. + def set_announcement + if Announcement.exists?(params[:id]) + @announcement = Announcement.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found announcement = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def announcement_params + params.permit(:group_id, :message, :status, :id) + end end diff --git a/api/app/controllers/api/auth/registrations_controller.rb b/api/app/controllers/api/auth/registrations_controller.rb index b6ceaef9b..8d9bfe429 100644 --- a/api/app/controllers/api/auth/registrations_controller.rb +++ b/api/app/controllers/api/auth/registrations_controller.rb @@ -2,6 +2,7 @@ module Api module Auth class RegistrationsController < DeviseTokenAuth::RegistrationsController private + def sign_up_params params.permit(:name, :email, :password, :password_confirmation, :role_id) end @@ -9,7 +10,6 @@ def sign_up_params def account_update_params params.permit(:name, :email, :role_id) end - end end end diff --git a/api/app/controllers/api/auth/sessions_controller.rb b/api/app/controllers/api/auth/sessions_controller.rb index 31d3d1801..7fe41c368 100644 --- a/api/app/controllers/api/auth/sessions_controller.rb +++ b/api/app/controllers/api/auth/sessions_controller.rb @@ -7,7 +7,7 @@ def index if current_api_user render json: { is_login: true, data: current_api_v1_user } else - render json: { is_login: false, message: "ユーザーが存在しません" } + render json: { is_login: false, message: 'ユーザーが存在しません' } end end end diff --git a/api/app/controllers/api/v1/announcements_api_controller.rb b/api/app/controllers/api/v1/announcements_api_controller.rb index b6f5e0180..58a3b10f1 100644 --- a/api/app/controllers/api/v1/announcements_api_controller.rb +++ b/api/app/controllers/api/v1/announcements_api_controller.rb @@ -1,75 +1,65 @@ class Api::V1::AnnouncementsApiController < ApplicationController + def get_announcement_index_for_admin_view + @announcements = Announcement.with_groups + render json: fmt(ok, @announcements) + end - def get_announcement_index_for_admin_view - @announcements = Announcement.with_groups - render json: fmt(ok, @announcements) - end - - def get_announcement_show_for_admin_view - @announcement = Announcement.with_group(params[:id]) - render json: fmt(ok, @announcement) - end + def get_announcement_show_for_admin_view + @announcement = Announcement.with_group(params[:id]) + render json: fmt(ok, @announcement) + end - def fit_announcement_index_for_admin_view(announcements) - announcements.map{ - |announcement| - { - "announcement": announcement, - "group": announcement.group - } + def fit_announcement_index_for_admin_view(announcements) + announcements.map do |announcement| + { + "announcement": announcement, + "group": announcement.group } end + end - def get_announcement_for_admin_view - @groups = Group.with_announcement(params[:id]) - render json: fmt(ok, @groups) - end + def get_announcement_for_admin_view + @groups = Group.with_announcement(params[:id]) + render json: fmt(ok, @groups) + end - # admin_viewのannouncement/indexの形に整える - def fit_group_index_for_admin_view(groups) - groups.map{ - |group| - { - "group": group, - "group_category": group.group_category, - "fes_year": group.fes_year - } + # admin_viewのannouncement/indexの形に整える + def fit_group_index_for_admin_view(groups) + groups.map do |group| + { + "group": group, + "group_category": group.group_category, + "fes_year": group.fes_year } end + end - # 絞り込み機能 - def get_refinement_announcements - fes_year_id = params[:fes_year_id].to_i - # 両方ともALL - if fes_year_id == 0 - @groups = Group.with_announcements - # fes_year_idだけ指定 - elsif fes_year_id != 0 - @groups = Group.with_announcement_narrow_down_by_fes_year(fes_year_id) - end - - if @groups.count == 0 - render json: fmt(not_found, [], "Not found groups") - else - render json: fmt(ok, @groups) - end + # 絞り込み機能 + def get_refinement_announcements + fes_year_id = params[:fes_year_id].to_i + # 両方ともALL + if fes_year_id == 0 + @groups = Group.with_announcements + # fes_year_idだけ指定 + elsif fes_year_id != 0 + @groups = Group.with_announcement_narrow_down_by_fes_year(fes_year_id) end - # あいまい検索機能 - def get_search_announcements - word = params[:word] - @groups = Group.with_announcement_narrow_down_by_search_word(word) - if @groups.count == 0 - render json: fmt(not_found, [], "Not found groups") - else - render json: fmt(ok, @groups) - end + if @groups.count == 0 + render json: fmt(not_found, [], 'Not found groups') + else + render json: fmt(ok, @groups) end + end - - - - - - + # あいまい検索機能 + def get_search_announcements + word = params[:word] + @groups = Group.with_announcement_narrow_down_by_search_word(word) + if @groups.count == 0 + render json: fmt(not_found, [], 'Not found groups') + else + render json: fmt(ok, @groups) + end end +end diff --git a/api/app/controllers/api/v1/assign_rental_items_api_controller.rb b/api/app/controllers/api/v1/assign_rental_items_api_controller.rb index 98773a92b..a476651fa 100644 --- a/api/app/controllers/api/v1/assign_rental_items_api_controller.rb +++ b/api/app/controllers/api/v1/assign_rental_items_api_controller.rb @@ -1,79 +1,79 @@ class Api::V1::AssignRentalItemsApiController < ApplicationController + # 在庫物品 stocker_items + def get_stocker_item_index_for_admin_view + @stocker_items = StockerItem.with_rental_items + render json: fmt(ok, @stocker_items) + end - #在庫物品 stocker_items - def get_stocker_item_index_for_admin_view - @stocker_items = StockerItem.with_rental_items - render json: fmt(ok, @stocker_items) - end + def get_stocker_item_show_for_admin_view + @stocker_item = StockerItem.with_rental_item(params[:id]) + render json: fmt(ok, @stocker_item) + end - def get_stocker_item_show_for_admin_view - @stocker_item = StockerItem.with_rental_item(params[:id]) - render json: fmt(ok, @stocker_item) + def fit_stocker_item_index_for_admin_view(stocker_items) + stocker_items.map do |stocker_item| + { + "stocker_item": stocker_item, + "rental_item": stocker_item.rental_item + } end + end - def fit_stocker_item_index_for_admin_view(stocker_items) - stocker_items.map{ - |stocker_item| - { - "stocker_item": stocker_item, - "rental_item": stocker_item.rental_item, - } - } - end - - #在庫物品絞り込み - def get_refinement_stocker_item - stocker_place_id = params[:stocker_place_id].to_i - if stocker_place_id == 0 - @stocker_items = StockerItem.all - else - @stocker_items = StockerItem.where(stocker_place_id: stocker_place_id) - end + # 在庫物品絞り込み + def get_refinement_stocker_item + stocker_place_id = params[:stocker_place_id].to_i + @stocker_items = if stocker_place_id == 0 + StockerItem.all + else + StockerItem.where(stocker_place_id: stocker_place_id) + end - @stocker_place = StockerPlace.find(params[:stocker_place_id]) - - if @stocker_items.count == 0 - render json: fmt(not_found, { "stocker_place": @stocker_place, "stocker_items": [] }, "Not found stocker_items") - else - render json: fmt(ok, { "stocker_place": @stocker_place, "stocker_items": fit_stocker_item_index_for_admin_view(@stocker_items) }) - end - end + @stocker_place = StockerPlace.find(params[:stocker_place_id]) - #割当状況 assign_rental_items - def get_assign_rental_item_index_for_admin_view - @assign_rental_items = AssignRentalItem.with_groups_and_rental_item - render json: fmt(ok, @assign_rental_items) + if @stocker_items.count == 0 + render json: fmt(not_found, { "stocker_place": @stocker_place, "stocker_items": [] }, + 'Not found stocker_items') + else + render json: fmt(ok, + { "stocker_place": @stocker_place, + "stocker_items": fit_stocker_item_index_for_admin_view(@stocker_items) }) end + end - def get_assign_rental_item_show_for_admin_view - @assign_rental_item = AssignRentalItem.with_rental_item(params[:id]) - render json: fmt(ok, @assign_rental_item) - end + # 割当状況 assign_rental_items + def get_assign_rental_item_index_for_admin_view + @assign_rental_items = AssignRentalItem.with_groups_and_rental_item + render json: fmt(ok, @assign_rental_items) + end + + def get_assign_rental_item_show_for_admin_view + @assign_rental_item = AssignRentalItem.with_rental_item(params[:id]) + render json: fmt(ok, @assign_rental_item) + end - def fit_assign_rental_item_index_for_admin_view(assign_rental_items) - assign_rental_items.map{ - |assign_rental_item| - { - "assign_rental_item": assign_rental_item, - "rental_item": assign_rental_item.rental_item, - "group": assign_rental_item.group, - } - } + def fit_assign_rental_item_index_for_admin_view(assign_rental_items) + assign_rental_items.map do |assign_rental_item| + { + "assign_rental_item": assign_rental_item, + "rental_item": assign_rental_item.rental_item, + "group": assign_rental_item.group + } end + end - #割当状況絞り込み - def get_refinement_assign_rental_item - stocker_place_id = params[:stocker_place_id].to_i - if stocker_place_id == 0 - @assign_rental_items = AssignRentalItem.all - else - @assign_rental_items = AssignRentalItem.where(stocker_place_id: stocker_place_id) - end + # 割当状況絞り込み + def get_refinement_assign_rental_item + stocker_place_id = params[:stocker_place_id].to_i + @assign_rental_items = if stocker_place_id == 0 + AssignRentalItem.all + else + AssignRentalItem.where(stocker_place_id: stocker_place_id) + end - if @assign_rental_items.count == 0 - render json: fmt(not_found, [], "Not found assign_rental_items") - else - render json: fmt(ok, fit_assign_rental_item_index_for_admin_view(@assign_rental_items)) - end + if @assign_rental_items.count == 0 + render json: fmt(not_found, [], 'Not found assign_rental_items') + else + render json: fmt(ok, fit_assign_rental_item_index_for_admin_view(@assign_rental_items)) end + end end diff --git a/api/app/controllers/api/v1/cooking_process_orders_api_controller.rb b/api/app/controllers/api/v1/cooking_process_orders_api_controller.rb index 7fd9f2efb..840cb38b2 100644 --- a/api/app/controllers/api/v1/cooking_process_orders_api_controller.rb +++ b/api/app/controllers/api/v1/cooking_process_orders_api_controller.rb @@ -1,5 +1,4 @@ class Api::V1::CookingProcessOrdersApiController < ApplicationController - def get_cooking_process_order_for_admin_view @groups = Group.with_cooking_process_order(params[:id]) render json: fmt(ok, @groups) @@ -17,7 +16,7 @@ def get_refinement_cooking_process_orders end if @groups.count == 0 - render json: fmt(not_found, [], "Not found groups") + render json: fmt(not_found, [], 'Not found groups') else render json: fmt(ok, @groups) end @@ -28,7 +27,7 @@ def get_search_cooking_process_orders word = params[:word] @groups = Group.with_cooking_process_order_narrow_down_by_search_word(word) if @groups.count == 0 - render json: fmt(not_found, [], "Not found groups") + render json: fmt(not_found, [], 'Not found groups') else render json: fmt(ok, @groups) end diff --git a/api/app/controllers/api/v1/current_user_api_controller.rb b/api/app/controllers/api/v1/current_user_api_controller.rb index 82399fa72..ac2bbf93a 100644 --- a/api/app/controllers/api/v1/current_user_api_controller.rb +++ b/api/app/controllers/api/v1/current_user_api_controller.rb @@ -1,6 +1,6 @@ class Api::V1::CurrentUserApiController < ApplicationController # before_action :authenticate_api_user! - + # ログインユーザーの登録情報を全て取得する def current_regist_info @user = current_api_user @@ -8,7 +8,7 @@ def current_regist_info render json: fmt(ok, @groups) end - def password_reset + def password_reset @user = current_api_user @user.password = password_reset_params[:password] @user.password_confirmation = password_reset_params[:password_confirmation] @@ -23,7 +23,7 @@ def get_current_user_with_user_detail def edit_user_info @user = current_api_user - @user_detail = @user.user_detail + @user_detail = @user.user_detail @user.name = edit_user_info_params[:name] @user.email = edit_user_info_params[:email] @user_detail.student_id = edit_user_info_params[:student_id] @@ -31,7 +31,7 @@ def edit_user_info @user_detail.department_id = edit_user_info_params[:department_id] @user_detail.grade_id = edit_user_info_params[:grade_id] @user.save! - @user_detail.save! + @user_detail.save! end def is_login @@ -44,11 +44,12 @@ def is_login end private - def edit_user_info_params - params.permit(:name, :email, :student_id, :tel, :department_id, :grade_id) - end - def password_reset_params - params.permit(:password, :password_confirmation) - end + def edit_user_info_params + params.permit(:name, :email, :student_id, :tel, :department_id, :grade_id) + end + + def password_reset_params + params.permit(:password, :password_confirmation) + end end diff --git a/api/app/controllers/api/v1/dashboard_api_controller.rb b/api/app/controllers/api/v1/dashboard_api_controller.rb index 1bf7437db..f40dba0b1 100644 --- a/api/app/controllers/api/v1/dashboard_api_controller.rb +++ b/api/app/controllers/api/v1/dashboard_api_controller.rb @@ -1,53 +1,53 @@ class Api::V1::DashboardApiController < ApplicationController - def get_dashboard_info - # ユーザー数 - all_user_num = User.all.length - developer_num = User.where(role_id:1).length - manager_num = User.where(role_id:2).length - staff_num = User.where(role_id:3).length - user_num = User.where(role_id:4).length - groups = Group.all - groups_length = groups.length - cate_1_length = groups.where(group_category:1).length - cate_2_length = groups.where(group_category:2).length - cate_3_length = groups.where(group_category:3).length - cate_4_length = groups.where(group_category:4).length - cate_5_length = groups.where(group_category:5).length - cate_6_length = groups.where(group_category:6).length - all_length = StockerPlace.all.length - stock_item_status_1 = StockerPlace.where(stock_item_status:1).length - stock_item_status_2 = StockerPlace.where(stock_item_status:2).length - stock_item_status_3 = StockerPlace.where(stock_item_status:3).length - progress_stock_item_1 = (stock_item_status_1*100) / all_length - progress_stock_item_2 = (stock_item_status_2*100) / all_length - progress_stock_item_3 = (stock_item_status_3*100) / all_length - assign_item_status_1 = StockerPlace.where(assign_item_status:1).length - assign_item_status_2 = StockerPlace.where(assign_item_status:2).length - assign_item_status_3 = StockerPlace.where(assign_item_status:3).length - progress_assign_item_1 = (assign_item_status_1*100) / all_length - progress_assign_item_2 = (assign_item_status_2*100) / all_length - progress_assign_item_3 = (assign_item_status_3*100) / all_length - group_data = { - all_user_num: all_user_num, - developer_num: developer_num, - manager_num: manager_num, - staff_num: staff_num, - user_num: user_num, - groups_length: groups_length, - cate_1_length: cate_1_length, - cate_2_length: cate_2_length, - cate_3_length: cate_3_length, - cate_4_length: cate_4_length, - cate_5_length: cate_5_length, - cate_6_length: cate_6_length, - progress_stock_item_1: progress_stock_item_1, - progress_stock_item_2: progress_stock_item_2, - progress_stock_item_3: progress_stock_item_3, - progress_assign_item_1: progress_assign_item_1, - progress_assign_item_2: progress_assign_item_2, - progress_assign_item_3: progress_assign_item_3, - } + def get_dashboard_info + # ユーザー数 + all_user_num = User.all.length + developer_num = User.where(role_id: 1).length + manager_num = User.where(role_id: 2).length + staff_num = User.where(role_id: 3).length + user_num = User.where(role_id: 4).length + groups = Group.all + groups_length = groups.length + cate_1_length = groups.where(group_category: 1).length + cate_2_length = groups.where(group_category: 2).length + cate_3_length = groups.where(group_category: 3).length + cate_4_length = groups.where(group_category: 4).length + cate_5_length = groups.where(group_category: 5).length + cate_6_length = groups.where(group_category: 6).length + all_length = StockerPlace.all.length + stock_item_status_1 = StockerPlace.where(stock_item_status: 1).length + stock_item_status_2 = StockerPlace.where(stock_item_status: 2).length + stock_item_status_3 = StockerPlace.where(stock_item_status: 3).length + progress_stock_item_1 = (stock_item_status_1 * 100) / all_length + progress_stock_item_2 = (stock_item_status_2 * 100) / all_length + progress_stock_item_3 = (stock_item_status_3 * 100) / all_length + assign_item_status_1 = StockerPlace.where(assign_item_status: 1).length + assign_item_status_2 = StockerPlace.where(assign_item_status: 2).length + assign_item_status_3 = StockerPlace.where(assign_item_status: 3).length + progress_assign_item_1 = (assign_item_status_1 * 100) / all_length + progress_assign_item_2 = (assign_item_status_2 * 100) / all_length + progress_assign_item_3 = (assign_item_status_3 * 100) / all_length + group_data = { + all_user_num: all_user_num, + developer_num: developer_num, + manager_num: manager_num, + staff_num: staff_num, + user_num: user_num, + groups_length: groups_length, + cate_1_length: cate_1_length, + cate_2_length: cate_2_length, + cate_3_length: cate_3_length, + cate_4_length: cate_4_length, + cate_5_length: cate_5_length, + cate_6_length: cate_6_length, + progress_stock_item_1: progress_stock_item_1, + progress_stock_item_2: progress_stock_item_2, + progress_stock_item_3: progress_stock_item_3, + progress_assign_item_1: progress_assign_item_1, + progress_assign_item_2: progress_assign_item_2, + progress_assign_item_3: progress_assign_item_3 + } - render json: group_data - end + render json: group_data + end end diff --git a/api/app/controllers/api/v1/employees_api_controller.rb b/api/app/controllers/api/v1/employees_api_controller.rb index 7308b33d8..7503c890f 100644 --- a/api/app/controllers/api/v1/employees_api_controller.rb +++ b/api/app/controllers/api/v1/employees_api_controller.rb @@ -1,5 +1,4 @@ class Api::V1::EmployeesApiController < ApplicationController - def get_employee_index_for_admin_view @employees = Employee.with_groups render json: fmt(ok, @employees) @@ -11,43 +10,45 @@ def get_employee_show_for_admin_view end def fit_employee_index_for_admin_view(employees) - employees.map{ - |employee| + employees.map do |employee| { "employee": employee, "group": employee.group, "stool_test": employee.stool_test } - } + end end # 絞り込み機能 def get_refinement_employees fes_year_id = params[:fes_year_id].to_i # 指定なし - if fes_year_id == 0 - @employees = Employee.all - #fes_year_id指定 - else - @employees = Employee.preload(:group).map{ |employee| employee if employee.group.fes_year_id == fes_year_id }.compact - end + @employees = if fes_year_id == 0 + Employee.all + # fes_year_id指定 + else + Employee.preload(:group).map do |employee| + employee if employee.group.fes_year_id == fes_year_id + end.compact + end if @employees.count == 0 - render json: fmt(not_found, [], "Not found empolees") - else + render json: fmt(not_found, [], 'Not found empolees') + else render json: fmt(ok, fit_employee_index_for_admin_view(@employees)) end end - #あいまい検索 + # あいまい検索 def get_search_employees word = params[:word] - @employees = Employee.all.map{ |employee| employee if employee.group.name.include?(word) || employee.name.include?(word) }.compact + @employees = Employee.all.map do |employee| + employee if employee.group.name.include?(word) || employee.name.include?(word) + end.compact if @employees.count == 0 - render json: fmt(not_found, [], "Not found employees") + render json: fmt(not_found, [], 'Not found employees') else render json: fmt(ok, fit_employee_index_for_admin_view(@employees)) end end - end diff --git a/api/app/controllers/api/v1/fes_dates_api_controller.rb b/api/app/controllers/api/v1/fes_dates_api_controller.rb index bcaa21142..f6adafb97 100644 --- a/api/app/controllers/api/v1/fes_dates_api_controller.rb +++ b/api/app/controllers/api/v1/fes_dates_api_controller.rb @@ -1,5 +1,4 @@ class Api::V1::FesDatesApiController < ApplicationController - def get_refinement_fes_date_by_fes_year fes_year_id = params[:fes_year_id] @fes_dates = FesDate.where(fes_year_id: fes_year_id) @@ -17,4 +16,3 @@ def get_current_fes_dates render json: fmt(ok, @fes_dates) end end - diff --git a/api/app/controllers/api/v1/food_products_api_controller.rb b/api/app/controllers/api/v1/food_products_api_controller.rb index eed40af52..99756439a 100644 --- a/api/app/controllers/api/v1/food_products_api_controller.rb +++ b/api/app/controllers/api/v1/food_products_api_controller.rb @@ -1,5 +1,4 @@ class Api::V1::FoodProductsApiController < ApplicationController - def get_food_product_index_for_admin_view @food_products = FoodProduct.with_groups render json: fmt(ok, @food_products) @@ -12,16 +11,15 @@ def get_food_product_show_for_admin_view # admin_pageのviewの形に整える def fit_food_product_index_for_admin_view(food_products) - food_products.map{ - |food_product| + food_products.map do |food_product| { "food_product": food_product, "group": food_product.group } - } + end end - #絞り込み機能 + # 絞り込み機能 def get_refinement_food_products fes_year_id = params[:fes_year_id].to_i is_cooking = params[:is_cooking].to_i @@ -38,45 +36,65 @@ def get_refinement_food_products @food_products = FoodProduct.all # fes_year_idだけ指定 elsif fes_year_id != 0 && is_cooking == 0 && category_id == 0 - @food_products = FoodProduct.preload(:group).map{ |food_product| food_product if food_product.group.fes_year_id == fes_year_id }.compact + @food_products = FoodProduct.preload(:group).map do |food_product| + food_product if food_product.group.fes_year_id == fes_year_id + end.compact # is_cookingだけ指定 elsif fes_year_id == 0 && is_cooking != 0 && category_id == 0 @food_products = FoodProduct.where(is_cooking: is_cooking_list[is_cooking]) # category_idだけ指定 elsif fes_year_id == 0 && is_cooking == 0 && category_id != 0 - @food_products = FoodProduct.preload(:group).map{ |food_product| food_product if food_product.group.group_category_id == category_id }.compact + @food_products = FoodProduct.preload(:group).map do |food_product| + food_product if food_product.group.group_category_id == category_id + end.compact # fes_year_idとis_cookingの指定 elsif fes_year_id != 0 && is_cooking != 0 && category_id == 0 - @food_products = FoodProduct.where(is_cooking: is_cooking_list[is_cooking]).map{ |food_product| food_product if food_product.group.fes_year_id == fes_year_id }.compact + @food_products = FoodProduct.where(is_cooking: is_cooking_list[is_cooking]).map do |food_product| + food_product if food_product.group.fes_year_id == fes_year_id + end.compact # fes_year_idとcategory_idの指定 elsif fes_year_id != 0 && is_cooking == 0 && category_id != 0 - @food_products = FoodProduct.preload(:group).map{ |food_product| food_product if food_product.group.fes_year_id == fes_year_id && food_product.group.group_category_id == category_id }.compact + @food_products = FoodProduct.preload(:group).map do |food_product| + if food_product.group.fes_year_id == fes_year_id && food_product.group.group_category_id == category_id + food_product + end + end.compact # is_cookingとcategory_idの指定 elsif fes_year_id == 0 && is_cooking != 0 && category_id != 0 - @food_products = FoodProduct.where(is_cooking: is_cooking_list[is_cooking]).map{ |food_product| food_product if food_product.group.group_category_id == category_id }.compact + @food_products = FoodProduct.where(is_cooking: is_cooking_list[is_cooking]).map do |food_product| + food_product if food_product.group.group_category_id == category_id + end.compact # 全部指定 else - @food_products = FoodProduct.where(is_cooking: is_cooking_list[is_cooking]).map{ |food_product| food_product if food_product.group.fes_year_id == fes_year_id && food_product.group.group_category_id == category_id }.compact + @food_products = FoodProduct.where(is_cooking: is_cooking_list[is_cooking]).map do |food_product| + if food_product.group.fes_year_id == fes_year_id && food_product.group.group_category_id == category_id + food_product + end + end.compact end if search_word.present? # 文字列検索 - @food_products = @food_products.map{ |food_product| food_product if food_product.group.name.include?(search_word) || food_product.name.include?(search_word) }.compact + @food_products = @food_products.map do |food_product| + food_product if food_product.group.name.include?(search_word) || food_product.name.include?(search_word) + end.compact end if @food_products.count == 0 - render json: fmt(not_found, [], "Not found food_products") - else + render json: fmt(not_found, [], 'Not found food_products') + else render json: fmt(ok, fit_food_product_index_for_admin_view(@food_products)) end end - #あいまい検索 + # あいまい検索 def get_search_food_products word = params[:word] - @food_products = FoodProduct.all.map{ |food_product| food_product if food_product.group.name.include?(word) || food_product.name.include?(word) }.compact + @food_products = FoodProduct.all.map do |food_product| + food_product if food_product.group.name.include?(word) || food_product.name.include?(word) + end.compact if @food_products.count == 0 - render json: fmt(not_found, [], "Not found food_products") + render json: fmt(not_found, [], 'Not found food_products') else render json: fmt(ok, fit_food_product_index_for_admin_view(@food_products)) end @@ -87,10 +105,9 @@ def get_food_products_by_group_id group_id = params[:group_id] @food_products = FoodProduct.where(group_id: group_id) if @food_products.count == 0 - render json: fmt(not_found, [], "Not found food_products") + render json: fmt(not_found, [], 'Not found food_products') else render json: fmt(ok, @food_products) end end - end diff --git a/api/app/controllers/api/v1/groups_api_controller.rb b/api/app/controllers/api/v1/groups_api_controller.rb index bb0008ea9..3391766c9 100644 --- a/api/app/controllers/api/v1/groups_api_controller.rb +++ b/api/app/controllers/api/v1/groups_api_controller.rb @@ -1,5 +1,4 @@ class Api::V1::GroupsApiController < ApplicationController - def get_group_index_for_admin_view @groups = Group.with_group_categories_and_fes_years render json: fmt(ok, @groups) @@ -41,17 +40,16 @@ def get_groups_have_no_venue_map # admin_pageのviewの形に整える def fit_group_index_for_admin_view(groups) - groups.map{ - |group| + groups.map do |group| { "group": group, "group_category": group.group_category, "fes_year": group.fes_year } - } + end end - #fes_yearによる絞り込み + # fes_yearによる絞り込み def get_groups_refinemented_by_current_fes_year @current_fes_year = UserPageSetting.first.fes_year @group = Group.where(fes_year_id: @current_fes_year.id) @@ -64,9 +62,7 @@ def get_refinement_groups group_category_id = params[:group_category_id].to_i committee = params[:committee].to_i is_international = params[:is_international].to_i - is_external = params[:is_external].to_i - - option_list = [nil, true, false] # 0: 指定なし(ALL) 1: true 2: false + is_external = params[:is_external].to_i # 0: 指定なし(ALL) 1: true 2: false @groups = Group.all @groups = @groups.where(fes_year_id: fes_year_id) unless fes_year_id == 0 @@ -76,7 +72,7 @@ def get_refinement_groups @groups = @groups.where(is_external: is_external == 1) unless is_external == 0 if @groups.count == 0 - render json: fmt(not_found, [], "Not found groups") + render json: fmt(not_found, [], 'Not found groups') else render json: fmt(ok, fit_group_index_for_admin_view(@groups)) end @@ -85,17 +81,16 @@ def get_refinement_groups # あいまい検索機能 def get_search_groups word = params[:word] - groups_name = Group.where("name like ?","%#{word}%") - groups_category = Group.where("group_category_id like ?","%#{word}%") - project_name = Group.where("project_name like ?","%#{word}%") + groups_name = Group.where('name like ?', "%#{word}%") + groups_category = Group.where('group_category_id like ?', "%#{word}%") + project_name = Group.where('project_name like ?', "%#{word}%") @groups = (groups_name + groups_category + project_name).uniq if @groups.count == 0 - render json: fmt(not_found, [], "Not found groups") + render json: fmt(not_found, [], 'Not found groups') else render json: fmt(ok, fit_group_index_for_admin_view(@groups)) end end - end diff --git a/api/app/controllers/api/v1/order_infos_api_controller.rb b/api/app/controllers/api/v1/order_infos_api_controller.rb index cd99fae06..7f0865f6c 100644 --- a/api/app/controllers/api/v1/order_infos_api_controller.rb +++ b/api/app/controllers/api/v1/order_infos_api_controller.rb @@ -1,5 +1,4 @@ class Api::V1::OrderInfosApiController < ApplicationController - def get_order_info_for_admin_view @groups = Group.with_order_info(params[:id]) render json: fmt(ok, @groups) @@ -11,14 +10,14 @@ def get_refinement_order_infos # fes_yesrがALL if fes_year_id == 0 @groups = Group.with_order_infos - # fes_year_idが指定 + # fes_year_idが指定 elsif fes_year_id != 0 @groups = Group.with_order_info_narrow_down_by_fes_year(fes_year_id) end if @groups.count == 0 - render json: fmt(not_found, [], "Not found groups") - else + render json: fmt(not_found, [], 'Not found groups') + else render json: fmt(ok, @groups) end end @@ -28,10 +27,9 @@ def get_search_order_infos word = params[:word] @groups = Group.with_order_info_narrow_down_by_search_word(word) if @groups.count == 0 - render json: fmt(not_found, [], "Not found groups") + render json: fmt(not_found, [], 'Not found groups') else render json: fmt(ok, @groups) end end - end diff --git a/api/app/controllers/api/v1/order_status_check_api_controller.rb b/api/app/controllers/api/v1/order_status_check_api_controller.rb index 88e2c7f21..f56a38ed6 100644 --- a/api/app/controllers/api/v1/order_status_check_api_controller.rb +++ b/api/app/controllers/api/v1/order_status_check_api_controller.rb @@ -1,67 +1,68 @@ class Api::V1::OrderStatusCheckApiController < ApplicationController + def get_order_status_check_for_admin_view + @groups = Group.with_order_status_check(params[:id]) + render json: fmt(ok, @groups) + end - def get_order_status_check_for_admin_view - @groups = Group.with_order_status_check(params[:id]) - render json: fmt(ok, @groups) - end - - # admin_pageのviewの形に整える - def fit_group_index_for_admin_view(groups) - groups.map{ - |group| - { - "group": group, - "user": group.user.nil? ? nil: group.user.id, - "group_category": group.group_category.nil? ? nil : group.group_category.id, - "fes_year": group.fes_year.nil? ? nil : group.fes_year.id, - "sub_rep": group.sub_rep.nil? ? nil : group.sub_rep.id, - "place_order": group.place_order.nil? ? nil : group.place_order.id, - "stage_orders": group.stage_orders.count == 0 ? nil : group.stage_orders[0].id, - "stage_common_option": group.stage_common_option.nil? ? nil : group.stage_common_option.id, - "power_orders": group.power_orders.count == 0 ? nil : group.power_orders[0].id, - "rental_orders": group.rental_orders.count == 0 ? nil : group.rental_orders[0].id, - "employees": group.employees.count == 0 ? nil : group.employees[0].id, - "food_product": group.food_products.empty? ? nil : true, - "purchase_list": group.food_products.empty? ? nil : group.food_products.any? { |food_product| !food_product.purchase_lists.empty? } ? true : nil, - "public_relation": group.public_relation.nil? ? nil : group.public_relation.id, - "venue_map": group.venue_map.nil? ? nil : group.venue_map.id, - "announcement": group.announcement.nil? ? nil : group.announcement.status, - "cooking_process_order": group.cooking_process_order.nil? ? nil : group.cooking_process_order.id - } + # admin_pageのviewの形に整える + def fit_group_index_for_admin_view(groups) + groups.map do |group| + { + "group": group, + "user": group.user.nil? ? nil : group.user.id, + "group_category": group.group_category.nil? ? nil : group.group_category.id, + "fes_year": group.fes_year.nil? ? nil : group.fes_year.id, + "sub_rep": group.sub_rep.nil? ? nil : group.sub_rep.id, + "place_order": group.place_order.nil? ? nil : group.place_order.id, + "stage_orders": group.stage_orders.count == 0 ? nil : group.stage_orders[0].id, + "stage_common_option": group.stage_common_option.nil? ? nil : group.stage_common_option.id, + "power_orders": group.power_orders.count == 0 ? nil : group.power_orders[0].id, + "rental_orders": group.rental_orders.count == 0 ? nil : group.rental_orders[0].id, + "employees": group.employees.count == 0 ? nil : group.employees[0].id, + "food_product": group.food_products.empty? ? nil : true, + "purchase_list": if group.food_products.empty? + nil + elsif group.food_products.any? do |food_product| + !food_product.purchase_lists.empty? + end + true + end, + "public_relation": group.public_relation.nil? ? nil : group.public_relation.id, + "venue_map": group.venue_map.nil? ? nil : group.venue_map.id, + "announcement": group.announcement.nil? ? nil : group.announcement.status, + "cooking_process_order": group.cooking_process_order.nil? ? nil : group.cooking_process_order.id } end + end - # 絞り込み機能 - def get_refinement_order_status_check - fes_year_id = params[:fes_year_id].to_i - group_category_id = params[:group_category_id].to_i - is_international = params[:is_international].to_i - is_external = params[:is_external].to_i - - option_list = [nil, true, false] # 0: 指定なし(ALL) 1: true 2: false + # 絞り込み機能 + def get_refinement_order_status_check + fes_year_id = params[:fes_year_id].to_i + group_category_id = params[:group_category_id].to_i + is_international = params[:is_international].to_i + is_external = params[:is_external].to_i # 0: 指定なし(ALL) 1: true 2: false - @groups = Group.all - @groups = @groups.where(fes_year_id: fes_year_id) unless fes_year_id == 0 - @groups = @groups.where(group_category_id: group_category_id) unless group_category_id == 0 - @groups = @groups.where(is_international: is_international == 1) unless is_international == 0 - @groups = @groups.where(is_external: is_external == 1) unless is_external == 0 + @groups = Group.all + @groups = @groups.where(fes_year_id: fes_year_id) unless fes_year_id == 0 + @groups = @groups.where(group_category_id: group_category_id) unless group_category_id == 0 + @groups = @groups.where(is_international: is_international == 1) unless is_international == 0 + @groups = @groups.where(is_external: is_external == 1) unless is_external == 0 - if @groups.count == 0 - render json: fmt(not_found, [], "Not found groups") - else - render json: fmt(ok, fit_group_index_for_admin_view(@groups)) - end + if @groups.count == 0 + render json: fmt(not_found, [], 'Not found groups') + else + render json: fmt(ok, fit_group_index_for_admin_view(@groups)) end + end - # あいまい検索機能 - def get_search_order_status_check - word = params[:word] - @groups = Group.with_order_status_check_narrow_down_by_search_word(word) - if @groups.count == 0 - render json: fmt(not_found, [], "Not found groups") - else - render json: fmt(ok, @groups) - end + # あいまい検索機能 + def get_search_order_status_check + word = params[:word] + @groups = Group.with_order_status_check_narrow_down_by_search_word(word) + if @groups.count == 0 + render json: fmt(not_found, [], 'Not found groups') + else + render json: fmt(ok, @groups) end - end +end diff --git a/api/app/controllers/api/v1/output_csv_controller.rb b/api/app/controllers/api/v1/output_csv_controller.rb index 7cdf45f15..5d589d7f6 100644 --- a/api/app/controllers/api/v1/output_csv_controller.rb +++ b/api/app/controllers/api/v1/output_csv_controller.rb @@ -5,20 +5,19 @@ def output_groups_csv if params[:fes_year_id].to_i == 0 # 全件選択 @groups = Group.all - filename_year = "全" + filename_year = '全' else @groups = Group.where(fes_year_id: params[:fes_year_id]) filename_year = FesYear.find(params[:fes_year_id]).year_num end bom = "\uFEFF" csv_data = CSV.generate(bom) do |csv| - column_name = %w(参加団体名 企画名 活動内容 代表者 メールアドレス カテゴリー 開催年) + column_name = %w[参加団体名 企画名 活動内容 代表者 メールアドレス カテゴリー 開催年] csv << column_name @groups.each do |group| # データが存在しない場合はスキップする - if group.nil? - next - end + next if group.nil? + column_values = [ group.name, group.project_name, @@ -38,7 +37,7 @@ def output_assign_rental_items_csv if params[:fes_year_id].to_i == 0 # 全件選択 @assign_rental_items = AssignRentalItem.all - filename_year = "全" + filename_year = '全' else @assign_rental_items = Group.where(fes_year_id: params[:fes_year_id]) filename_year = FesYear.find(params[:fes_year_id]).year_num @@ -46,13 +45,12 @@ def output_assign_rental_items_csv bom = "\uFEFF" csv_data = CSV.generate(bom) do |csv| # column_name = %w(識別番号 参加団体名 カテゴリー 活動場所 使用電力 貸出物品名 借りる場所 数量 貸出日 返却日 開催年) - column_name = %w(識別番号 参加団体名 カテゴリー 活動場所 使用電力 貸出物品名 借りる場所 数量) + column_name = %w[識別番号 参加団体名 カテゴリー 活動場所 使用電力 貸出物品名 借りる場所 数量] csv << column_name @assign_rental_items.each do |assign_rental_item| # データが存在しない場合はスキップする - if assign_rental_item.nil? - next - end + next if assign_rental_item.nil? + column_values = [ assign_rental_item.group.number, assign_rental_item.group.name, @@ -61,7 +59,7 @@ def output_assign_rental_items_csv assign_rental_item.group.sum_power_orders, assign_rental_item.rental_item.name, assign_rental_item.stocker_place.name, - assign_rental_item.num, + assign_rental_item.num # assign_rental_item.group.fes_year.fes_dates.where(days_num: 0).nil? ? nil : assign_rental_item.group.fes_year.fes_dates.where(days_num: 0).first.date, # assign_rental_item.group.fes_year.fes_dates.where(days_num: 3).nil? ? nil : assign_rental_item.group.fes_year.fes_dates.where(days_num: 3).first.date, # assign_rental_item.group.fes_year.year_num @@ -74,21 +72,20 @@ def output_assign_rental_items_csv def output_sub_reps_csv if params[:fes_year_id].to_id == 0 - @sub_reps = Group.preload(:sub_rep).map{ |group| group.sub_rep } - filename_year = "全" + @sub_reps = Group.preload(:sub_rep).map { |group| group.sub_rep } + filename_year = '全' else - @sub_reps = Group.where(fes_year_id:params[:fes_year_id]).preload(:sub_rep).map{ |group| group.sub_rep } + @sub_reps = Group.where(fes_year_id: params[:fes_year_id]).preload(:sub_rep).map { |group| group.sub_rep } filename_year = FesYear.find(params[:fes_year_id]).year_num end bom = "\uFEFF" csv_data = CSV.generate(bom) do |csv| - column_name = %w(参加団体名 カテゴリー 名前 学科 学年 学籍番号 メールアドレス 電話番号 開催年) + column_name = %w[参加団体名 カテゴリー 名前 学科 学年 学籍番号 メールアドレス 電話番号 開催年] csv << column_name @sub_reps.each do |sub_rep| # データが存在しない場合はスキップする - if sub_rep.nil? - next - end + next if sub_rep.nil? + column_values = [ sub_rep.group.name, sub_rep.group.group_category.name, @@ -108,26 +105,26 @@ def output_sub_reps_csv def output_rental_orders_csv if params[:fes_year_id].to_i == 0 - @rental_orders = Group.preload(:rental_orders).map{ |group| group.rental_orders } - filename_year = "全" + @rental_orders = Group.preload(:rental_orders).map { |group| group.rental_orders } + filename_year = '全' else - @rental_orders = Group.where(fes_year_id:params[:fes_year_id]).preload(:rental_orders).map{ |group| group.rental_orders } + @rental_orders = Group.where(fes_year_id: params[:fes_year_id]).preload(:rental_orders).map do |group| + group.rental_orders + end filename_year = FesYear.find(params[:fes_year_id]).year_num end bom = "\uFEFF" csv_data = CSV.generate(bom) do |csv| - column_name = %w(参加団体名 代表者 メールアドレス カテゴリー 物品名 数 開催年) + column_name = %w[参加団体名 代表者 メールアドレス カテゴリー 物品名 数 開催年] csv << column_name @rental_orders.each do |group| # データが存在しない場合はスキップする - if group.nil? - next - end + next if group.nil? + group.each do |rental_order| # データが存在しない場合はスキップする - if rental_order.nil? - next - end + next if rental_order.nil? + column_values = [ rental_order.group.name, rental_order.group.user.name, @@ -146,26 +143,26 @@ def output_rental_orders_csv def output_power_orders_csv if params[:fes_year_id].to_i == 0 - @power_orders = Group.preload(:power_orders).map{ |group| group.power_orders } - filename_year = "全" + @power_orders = Group.preload(:power_orders).map { |group| group.power_orders } + filename_year = '全' else - @power_orders = Group.where(fes_year_id:params[:fes_year_id]).preload(:power_orders).map{ |group| group.power_orders } + @power_orders = Group.where(fes_year_id: params[:fes_year_id]).preload(:power_orders).map do |group| + group.power_orders + end filename_year = FesYear.find(params[:fes_year_id]).year_num end bom = "\uFEFF" csv_data = CSV.generate(bom) do |csv| - column_name = %w(参加団体名 代表者 メールアドレス カテゴリー 製品 URL 電力 メーカー 型番) + column_name = %w[参加団体名 代表者 メールアドレス カテゴリー 製品 URL 電力 メーカー 型番] csv << column_name @power_orders.each do |group| # データが存在しない場合はスキップする - if group.nil? - next - end + next if group.nil? + group.each do |power_order| # データが存在しない場合はスキップする - if power_order.nil? - next - end + next if power_order.nil? + column_values = [ power_order.group.name, power_order.group.user.name, @@ -186,21 +183,22 @@ def output_power_orders_csv def output_place_orders_csv if params[:fes_year_id].to_i == 0 - @place_orders = Group.preload(:place_order).map{ |group| group.place_order } - filename_year = "全" + @place_orders = Group.preload(:place_order).map { |group| group.place_order } + filename_year = '全' else - @place_orders = Group.where(fes_year_id:params[:fes_year_id]).preload(:place_order).map{ |group| group.place_order } + @place_orders = Group.where(fes_year_id: params[:fes_year_id]).preload(:place_order).map do |group| + group.place_order + end filename_year = FesYear.find(params[:fes_year_id]).year_num end bom = "\uFEFF" csv_data = CSV.generate(bom) do |csv| - column_name = %w(参加団体名 代表者 メールアドレス カテゴリー 第1希望 第2希望 第3希望 備考) + column_name = %w[参加団体名 代表者 メールアドレス カテゴリー 第1希望 第2希望 第3希望 備考] csv << column_name @place_orders.each do |place_order| # データが存在しない場合はスキップする - if place_order.nil? - next - end + next if place_order.nil? + column_values = [ place_order.group.name, place_order.group.user.name, @@ -219,30 +217,30 @@ def output_place_orders_csv def output_stage_orders_csv if params[:fes_year_id].to_i == 0 - @stage_orders = Group.preload(:stage_orders).map{ |group| group.stage_orders } - filename_year = "全" + @stage_orders = Group.preload(:stage_orders).map { |group| group.stage_orders } + filename_year = '全' else - @stage_orders = Group.where(fes_year_id:params[:fes_year_id]).preload(:stage_orders).map{ |group| group.stage_orders } + @stage_orders = Group.where(fes_year_id: params[:fes_year_id]).preload(:stage_orders).map do |group| + group.stage_orders + end filename_year = FesYear.find(params[:fes_year_id]).year_num end bom = "\uFEFF" csv_data = CSV.generate(bom) do |csv| - column_name = %w(参加団体名 カテゴリー 天気 日付 曜日 何日目 第1希望 第2希望 使用時間 準備時間 片付け時間 準備開始時刻 演目開始時刻 演目終了時刻 片付け終了時刻) + column_name = %w[参加団体名 カテゴリー 天気 日付 曜日 何日目 第1希望 第2希望 使用時間 準備時間 片付け時間 準備開始時刻 演目開始時刻 演目終了時刻 片付け終了時刻] csv << column_name @stage_orders.each do |group| - # データが存在しない場合はスキップする - if group.nil? - next - end + # データが存在しない場合はスキップする + next if group.nil? + group.each do |stage_order| # データが存在しない場合はスキップする - if stage_order.nil? - next - end + next if stage_order.nil? + column_values = [ stage_order.group.name, stage_order.group.group_category.name, - stage_order.is_sunny ? "晴れ" : "雨", + stage_order.is_sunny ? '晴れ' : '雨', stage_order.fes_date.date, stage_order.fes_date.day, stage_order.fes_date.days_num, @@ -265,56 +263,55 @@ def output_stage_orders_csv def output_stage_common_options_csv if params[:fes_year_id].to_i == 0 - @stage_common_options = Group.preload(:stage_common_option).map{ |group| group.stage_common_option } - filename_year = "全" + @stage_common_options = Group.preload(:stage_common_option).map { |group| group.stage_common_option } + filename_year = '全' else - @stage_common_options = Group.where(fes_year_id:params[:fes_year_id]).preload(:stage_common_option).map{ |group| group.stage_common_option } + @stage_common_options = Group.where(fes_year_id: params[:fes_year_id]).preload(:stage_common_option).map do |group| + group.stage_common_option + end filename_year = FesYear.find(params[:fes_year_id]).year_num end bom = "\uFEFF" csv_data = CSV.generate(bom) do |csv| - column_name = %w(参加団体名 所持機器の使用 音楽の使用 撮影許可 大きな音 内容) + column_name = %w[参加団体名 所持機器の使用 音楽の使用 撮影許可 大きな音 内容] csv << column_name @stage_common_options.each do |stage_common_option| # データが存在しない場合はスキップする - if stage_common_option.nil? - next - end + next if stage_common_option.nil? + column_values = [ stage_common_option.group.name, - stage_common_option.own_equipment ? "使用する" : "使用しない", - stage_common_option.bgm ? "使用する" : "使用しない", - stage_common_option.camera_permission ? "許可する" : "許可しない", - stage_common_option.loud_sound ? "出す" : "出さない" + stage_common_option.own_equipment ? '使用する' : '使用しない', + stage_common_option.bgm ? '使用する' : '使用しない', + stage_common_option.camera_permission ? '許可する' : '許可しない', + stage_common_option.loud_sound ? '出す' : '出さない' ] csv << column_values end end - send_data(csv_data, filename:"ステージオプション申請_#{filename_year}年度.csv") + send_data(csv_data, filename: "ステージオプション申請_#{filename_year}年度.csv") end def output_employees_csv if params[:fes_year_id].to_i == 0 - @employees = Group.preload(:employees).map{ |group| group.employees } - filename_year = "全" + @employees = Group.preload(:employees).map { |group| group.employees } + filename_year = '全' else - @employees = Group.where(fes_year_id:params[:fes_year_id]).preload(:employees).map{ |group| group.employees } + @employees = Group.where(fes_year_id: params[:fes_year_id]).preload(:employees).map { |group| group.employees } filename_year = FesYear.find(params[:fes_year_id]).year_num end bom = "\uFEFF" csv_data = CSV.generate(bom) do |csv| - column_name = %w(参加団体名 名前 学籍番号) + column_name = %w[参加団体名 名前 学籍番号] csv << column_name @employees.each do |group| # データが存在しない場合はスキップする - if group.nil? - next - end + next if group.nil? + group.each do |employee| # データが存在しない場合はスキップする - if employee.nil? - next - end + next if employee.nil? + column_values = [ employee.group.name, employee.name, @@ -324,72 +321,72 @@ def output_employees_csv end end end - send_data(csv_data, filename:"従業員申請_#{filename_year}年度.csv") + send_data(csv_data, filename: "従業員申請_#{filename_year}年度.csv") end def output_food_products_csv if params[:fes_year_id].to_i == 0 - @food_products = Group.preload(:food_products).map{ |group| group.food_products } - filename_year = "全" + @food_products = Group.preload(:food_products).map { |group| group.food_products } + filename_year = '全' else - @food_products = Group.where(fes_year_id:params[:fes_year_id]).preload(:food_products).map{ |group| group.food_products } + @food_products = Group.where(fes_year_id: params[:fes_year_id]).preload(:food_products).map do |group| + group.food_products + end filename_year = FesYear.find(params[:fes_year_id]).year_num end bom = "\uFEFF" csv_data = CSV.generate(bom) do |csv| - column_name = %w(参加団体名 名前 1日目の個数 2日目の個数 調理の有無) + column_name = %w[参加団体名 名前 1日目の個数 2日目の個数 調理の有無] csv << column_name @food_products.each do |group| # データが存在しない場合はスキップする - if group.nil? - next - end + next if group.nil? + group.each do |food_product| # データが存在しない場合はスキップする - if food_product.nil? - next - end + next if food_product.nil? + column_values = [ food_product.group.name, food_product.name, food_product.first_day_num, food_product.second_day_num, - food_product.is_cooking ? "する" : "しない" + food_product.is_cooking ? 'する' : 'しない' ] csv << column_values end end end - send_data(csv_data, filename:"販売品申請_#{filename_year}年度.csv") + send_data(csv_data, filename: "販売品申請_#{filename_year}年度.csv") end def output_purchase_lists_csv if params[:fes_year_id].to_i == 0 - @purchase_lists = FoodProduct.preload(:purchase_lists).map{ |food_product| food_product.purchase_lists } - filename_year = "全" + @purchase_lists = FoodProduct.preload(:purchase_lists).map { |food_product| food_product.purchase_lists } + filename_year = '全' else - @purchase_lists = FoodProduct.preload(:purchase_lists).map{ |food_product| food_product.purchase_lists if food_product.group.fes_year_id == params[:fes_year_id] } + @purchase_lists = FoodProduct.preload(:purchase_lists).map do |food_product| + food_product.purchase_lists if food_product.group.fes_year_id == params[:fes_year_id] + end filename_year = FesYear.find(params[:fes_year_id]).year_num end bom = "\uFEFF" csv_data = CSV.generate(bom) do |csv| - column_name = %w(参加団体名 販売品 購入品 なまもの 購入店 購入日 曜日 何日目 URL) + column_name = %w[参加団体名 販売品 購入品 なまもの 購入店 購入日 曜日 何日目 URL] csv << column_name @purchase_lists.each do |food_product| # データが存在しない場合はスキップする - if food_product.nil? - next - end + next if food_product.nil? + food_product.each do |purchase_list| # データが存在しない場合はスキップする - if purchase_list.nil? - next - end + next if purchase_list.nil? + column_values = [ purchase_list.food_product.group.name, purchase_list.food_product.name, purchase_list.items, - purchase_list.is_fresh ? "はい" : "いいえ", + purchase_list.is_fresh ? 'はい' : 'いいえ', purchase_list.shop.name, purchase_list.fes_date.date, purchase_list.fes_date.day, @@ -400,30 +397,31 @@ def output_purchase_lists_csv end end end - send_data(csv_data, filename:"購入品申請_#{filename_year}年度.csv") + send_data(csv_data, filename: "購入品申請_#{filename_year}年度.csv") end def output_users_csv if params[:fes_year_id].to_i == 0 @groups = Group.preload(:user, :sub_rep, user: :user_detail) # 必要な関連を事前にロード - filename_year = "全" + filename_year = '全' else @groups = Group.where(fes_year_id: params[:fes_year_id]).preload(:user, :sub_rep, user: :user_detail) # 必要な関連を事前にロード filename_year = FesYear.find(params[:fes_year_id]).year_num end - + @categories = [] for i in 1..6 do group = @groups.where(group_category_id: i) @categories << group end - + bom = "\uFEFF" csv_data = CSV.generate(bom) do |csv| - column_name = %w(参加団体形式 団体番号 団体名 氏名 電話番号 メールアドレス 備考欄) + column_name = %w[参加団体形式 団体番号 団体名 氏名 電話番号 メールアドレス 備考欄] csv << column_name @categories.each do |category| next unless category.exists? + category.each do |group| rep = group.user sub_rep = group.sub_rep @@ -435,31 +433,30 @@ def output_users_csv rep&.name, rep&.user_detail&.tel, rep&.email, - "" # 備考欄は空のまま + '' # 備考欄は空のまま ] # 副代表者情報を2行目に追加 csv << [ - "", - "", - "", + '', + '', + '', sub_rep&.name, sub_rep&.tel, sub_rep&.email, - "" # 備考欄は空のまま + '' # 備考欄は空のまま ] end end end - + send_data(csv_data, filename: "連絡先リスト_#{filename_year}年度.csv") end - def output_announcements_csv @announcements = Announcement.all bom = "\uFEFF" csv_data = CSV.generate(bom) do |csv| - column_name = %w(参加団体名 アナウンス文) + column_name = %w[参加団体名 アナウンス文] csv << column_name @announcements.each do |announcement| column_values = [ @@ -469,54 +466,54 @@ def output_announcements_csv csv << column_values end end - send_data(csv_data, filename:"会場アナウンス文.csv") + send_data(csv_data, filename: '会場アナウンス文.csv') end def output_cooking_process_orders_csv @cooking_process_orders = CookingProcessOrder.all bom = "\uFEFF" csv_data = CSV.generate(bom) do |csv| - column_name = %w(参加団体名 営業前:調理場 営業中:調理場 テント内) + column_name = %w[参加団体名 営業前:調理場 営業中:調理場 テント内] csv << column_name @cooking_process_orders.each do |cooking_process_order| column_values = [ cooking_process_order.group.name, - cooking_process_order.pre_open_kitchen ? "申請する" : "申請しない", - cooking_process_order.during_open_kitchen ? "申請する" : "申請しない", + cooking_process_order.pre_open_kitchen ? '申請する' : '申請しない', + cooking_process_order.during_open_kitchen ? '申請する' : '申請しない', cooking_process_order.tent ] csv << column_values end end - send_data(csv_data, filename:"調理工程申請.csv") + send_data(csv_data, filename: '調理工程申請.csv') end def output_public_relations_csv if params[:fes_year_id].to_i == 0 - @public_relations = Group.preload(:public_relation).map{ |group| group.public_relation } - filename_year = "全" + @public_relations = Group.preload(:public_relation).map { |group| group.public_relation } + filename_year = '全' else - @public_relations = Group.where(fes_year_id:params[:fes_year_id]).preload(:public_relation).map{ |group| group.public_relation } + @public_relations = Group.where(fes_year_id: params[:fes_year_id]).preload(:public_relation).map do |group| + group.public_relation + end filename_year = FesYear.find(params[:fes_year_id]).year_num end bom = "\uFEFF" csv_data = CSV.generate(bom) do |csv| - column_name = %w(参加団体名 PR文 URL) + column_name = %w[参加団体名 PR文 URL] csv << column_name @public_relations.each do |public_relations| # データが存在しない場合はスキップする - if public_relations.nil? - next - end + next if public_relations.nil? + column_values = [ public_relations.group.name, public_relations.blurb, - public_relations.picture_path, + public_relations.picture_path ] csv << column_values end end - send_data(csv_data, filename:"参加団体PR申請_#{filename_year}年度.csv") + send_data(csv_data, filename: "参加団体PR申請_#{filename_year}年度.csv") end - end diff --git a/api/app/controllers/api/v1/place_orders_api_controller.rb b/api/app/controllers/api/v1/place_orders_api_controller.rb index 73f140c84..701180655 100644 --- a/api/app/controllers/api/v1/place_orders_api_controller.rb +++ b/api/app/controllers/api/v1/place_orders_api_controller.rb @@ -1,5 +1,4 @@ class Api::V1::PlaceOrdersApiController < ApplicationController - def get_place_order_index_for_admin_view @place_orders = PlaceOrder.get_with_groups render json: fmt(ok, @place_orders) @@ -12,32 +11,29 @@ def get_place_order_show_for_admin_view # admin_pageのviewの形に整える def fit_place_order_index_for_admin_view(place_orders) - place_orders.map{ - |place_order| + place_orders.map do |place_order| { "place_order": place_order, "place_order_name": place_order.to_place_name_h, "group": place_order.group } - } + end end - #絞り込み機能 + # 絞り込み機能 def get_refinement_place_orders - fes_year_id = params[:fes_year_id].to_i + fes_year_id = params[:fes_year_id].to_i place_id = params[:place_id].to_i group_category_id = params[:group_category_id].to_i @place_orders = PlaceOrder.preload(:group) # fes_year_id で絞り込み - if fes_year_id != 0 - @place_orders = @place_orders.joins(:group).where(groups: { fes_year_id: fes_year_id }) - end + @place_orders = @place_orders.joins(:group).where(groups: { fes_year_id: fes_year_id }) if fes_year_id != 0 # place_id で絞り込み if place_id != 0 - @place_orders = @place_orders.where("(first = ?) OR (second = ?) OR (third = ?)", place_id, place_id, place_id) + @place_orders = @place_orders.where('(first = ?) OR (second = ?) OR (third = ?)', place_id, place_id, place_id) end # group_category_id で絞り込み @@ -46,21 +42,24 @@ def get_refinement_place_orders end if @place_orders.empty? - render json: fmt(not_found, [], "Not found place_orders") - else + render json: fmt(not_found, [], 'Not found place_orders') + else render json: fmt(ok, fit_place_order_index_for_admin_view(@place_orders)) end end - #あいまい検索 + # あいまい検索 def get_search_place_orders word = params[:word] - @place_orders = PlaceOrder.all.map{ |place_order| place_order if place_order.group.name.include?(word) || place_order.to_place_name_h[:first].include?(word) || place_order.to_place_name_h[:second].include?(word) || place_order.to_place_name_h[:third].include?(word)}.compact + @place_orders = PlaceOrder.all.map do |place_order| + if place_order.group.name.include?(word) || place_order.to_place_name_h[:first].include?(word) || place_order.to_place_name_h[:second].include?(word) || place_order.to_place_name_h[:third].include?(word) + place_order + end + end.compact if @place_orders.count == 0 - render json: fmt(not_found, [], "Not found place_orders") + render json: fmt(not_found, [], 'Not found place_orders') else render json: fmt(ok, fit_place_order_index_for_admin_view(@place_orders)) end end - end diff --git a/api/app/controllers/api/v1/power_orders_api_controller.rb b/api/app/controllers/api/v1/power_orders_api_controller.rb index bb721f50a..bc8ccc090 100644 --- a/api/app/controllers/api/v1/power_orders_api_controller.rb +++ b/api/app/controllers/api/v1/power_orders_api_controller.rb @@ -1,5 +1,4 @@ class Api::V1::PowerOrdersApiController < ApplicationController - def get_power_order_index_for_admin_view @power_orders = PowerOrder.with_groups render json: fmt(ok, @power_orders) @@ -12,16 +11,15 @@ def get_power_order_show_for_admin_view # admin_pageのviewの形に整える def fit_power_order_index_for_admin_view(power_orders) - power_orders.map{ - |power_order| + power_orders.map do |power_order| { "power_order": power_order, - "group": power_order.group, + "group": power_order.group } - } + end end - #絞り込み機能 + # 絞り込み機能 def get_refinement_power_orders fes_year_id = params[:fes_year_id].to_i power = params[:power].to_i @@ -29,32 +27,29 @@ def get_refinement_power_orders # fes_year_id, power, category_idで絞り込み @power_orders = PowerOrder.all - if fes_year_id != 0 - @power_orders = @power_orders.joins(:group).where(groups: { fes_year_id: fes_year_id }) - end - if power != 0 - @power_orders = @power_orders.preload(:group).where("power >= ?", power) - end + @power_orders = @power_orders.joins(:group).where(groups: { fes_year_id: fes_year_id }) if fes_year_id != 0 + @power_orders = @power_orders.preload(:group).where('power >= ?', power) if power != 0 if group_category_id != 0 @power_orders = @power_orders.joins(:group).where(groups: { group_category_id: group_category_id }) end if @power_orders.count == 0 - render json: fmt(not_found, [], "Not found power_orders") + render json: fmt(not_found, [], 'Not found power_orders') else render json: fmt(ok, fit_power_order_index_for_admin_view(@power_orders)) end end - #あいまい検索 + # あいまい検索 def get_search_power_orders word = params[:word] - @power_orders = PowerOrder.all.map{ |power_order| power_order if power_order.group.name.include?(word) || power_order.item.include?(word) }.compact + @power_orders = PowerOrder.all.map do |power_order| + power_order if power_order.group.name.include?(word) || power_order.item.include?(word) + end.compact if @power_orders.count == 0 - render json: fmt(not_found, [], "Not found power_orders") + render json: fmt(not_found, [], 'Not found power_orders') else render json: fmt(ok, fit_power_order_index_for_admin_view(@power_orders)) end end - end diff --git a/api/app/controllers/api/v1/public_relations_api_controller.rb b/api/app/controllers/api/v1/public_relations_api_controller.rb index 3364ccec0..c34bc138b 100644 --- a/api/app/controllers/api/v1/public_relations_api_controller.rb +++ b/api/app/controllers/api/v1/public_relations_api_controller.rb @@ -1,5 +1,4 @@ class Api::V1::PublicRelationsApiController < ApplicationController - def get_public_relation_for_admin_view @groups = Group.with_public_relation(params[:id]) render json: fmt(ok, @groups) @@ -7,14 +6,13 @@ def get_public_relation_for_admin_view # admin_viewのpublic_relation/indexの形に整える def fit_group_index_for_admin_view(groups) - groups.map{ - |group| + groups.map do |group| { "group": group, "group_category": group.group_category, "fes_year": group.fes_year } - } + end end # 絞り込み機能 @@ -22,15 +20,15 @@ def get_refinement_public_relations fes_year_id = params[:fes_year_id].to_i # 両方ともALL if fes_year_id == 0 - @groups = Group.with_public_relations - # fes_year_idだけ指定 + @groups = Group.with_public_relations + # fes_year_idだけ指定 elsif fes_year_id != 0 @groups = Group.with_public_relation_narrow_down_by_fes_year(fes_year_id) end if @groups.count == 0 - render json: fmt(not_found, [], "Not found groups") - else + render json: fmt(not_found, [], 'Not found groups') + else render json: fmt(ok, @groups) end end @@ -40,10 +38,9 @@ def get_search_public_relations word = params[:word] @groups = Group.with_public_relation_narrow_down_by_search_word(word) if @groups.count == 0 - render json: fmt(not_found, [], "Not found groups") + render json: fmt(not_found, [], 'Not found groups') else render json: fmt(ok, @groups) end end - end diff --git a/api/app/controllers/api/v1/purchase_lists_api_controller.rb b/api/app/controllers/api/v1/purchase_lists_api_controller.rb index 3a95ad161..223cfa2b5 100644 --- a/api/app/controllers/api/v1/purchase_lists_api_controller.rb +++ b/api/app/controllers/api/v1/purchase_lists_api_controller.rb @@ -1,5 +1,4 @@ class Api::V1::PurchaseListsApiController < ApplicationController - def get_purchase_list_index_for_admin_view @purchase_lists = PurchaseList.with_groups_and_info render json: fmt(ok, @purchase_lists) @@ -11,14 +10,13 @@ def get_purchase_list_show_for_admin_view end def fit_purchase_list_index_for_admin_view(purchase_lists) - purchase_lists.map{ - |purchase_list| + purchase_lists.map do |purchase_list| { "purchase_list": purchase_list, "purchase_list_info": purchase_list.to_info_h, "group": purchase_list.food_product.group } - } + end end def get_refinement_purchase_lists @@ -27,32 +25,40 @@ def get_refinement_purchase_lists is_fresh_list = [nil, true, false] # 指定なし - if fes_year_id == 0 && is_fresh == 0 - @purchase_lists = PurchaseList.all - # fes_year_idだけ指定 - elsif fes_year_id != 0 && is_fresh == 0 - @purchase_lists = PurchaseList.preload(:food_product).map{ |purchase_list| purchase_list if purchase_list.food_product.group.fes_year_id == fes_year_id }.compact - # is_freshだけ指定 - elsif fes_year_id == 0 && is_fresh != 0 - @purchase_lists = PurchaseList.where(is_fresh: is_fresh_list[is_fresh]) - # 両方指定 - else - @purchase_lists = PurchaseList.where(is_fresh: is_fresh_list[is_fresh]).preload(:food_product).map{ |purchase_list| purchase_list if purchase_list.food_product.group.fes_year_id == fes_year_id }.compact - end + @purchase_lists = if fes_year_id == 0 && is_fresh == 0 + PurchaseList.all + # fes_year_idだけ指定 + elsif fes_year_id != 0 && is_fresh == 0 + PurchaseList.preload(:food_product).map do |purchase_list| + purchase_list if purchase_list.food_product.group.fes_year_id == fes_year_id + end.compact + # is_freshだけ指定 + elsif fes_year_id == 0 && is_fresh != 0 + PurchaseList.where(is_fresh: is_fresh_list[is_fresh]) + # 両方指定 + else + PurchaseList.where(is_fresh: is_fresh_list[is_fresh]).preload(:food_product).map do |purchase_list| + purchase_list if purchase_list.food_product.group.fes_year_id == fes_year_id + end.compact + end if @purchase_lists.count == 0 - render json: fmt(not_found, [], "Not found purchase_lists") + render json: fmt(not_found, [], 'Not found purchase_lists') else render json: fmt(ok, fit_purchase_list_index_for_admin_view(@purchase_lists)) end end - #あいまい検索 + # あいまい検索 def get_search_purchase_lists word = params[:word] - @purchase_lists = PurchaseList.preload(:food_product).map{ |purchase_list| purchase_list if purchase_list.items.include?(word) || purchase_list.food_product.name.include?(word) || purchase_list.food_product.group.name.include?(word) }.compact + @purchase_lists = PurchaseList.preload(:food_product).map do |purchase_list| + if purchase_list.items.include?(word) || purchase_list.food_product.name.include?(word) || purchase_list.food_product.group.name.include?(word) + purchase_list + end + end.compact if @purchase_lists.count == 0 - render json: fmt(not_found, [], "Not found purchase_lists") + render json: fmt(not_found, [], 'Not found purchase_lists') else render json: fmt(ok, fit_purchase_list_index_for_admin_view(@purchase_lists)) end diff --git a/api/app/controllers/api/v1/rental_items_api_controller.rb b/api/app/controllers/api/v1/rental_items_api_controller.rb index ec78c6c6a..74468dc4c 100644 --- a/api/app/controllers/api/v1/rental_items_api_controller.rb +++ b/api/app/controllers/api/v1/rental_items_api_controller.rb @@ -1,5 +1,4 @@ class Api::V1::RentalItemsApiController < ApplicationController - def get_rentable_items @items = RentalItem.where(is_inside_shop_rentable: true).where(is_outside_shop_rentable: true).where(is_stage_rentable: true) render json: fmt(ok, @items) @@ -34,5 +33,4 @@ def get_stage_rentable_items @items = RentalItem.where(is_stage_rentable: true) render json: fmt(ok, @items) end - end diff --git a/api/app/controllers/api/v1/rental_orders_api_controller.rb b/api/app/controllers/api/v1/rental_orders_api_controller.rb index 487d9c5ad..4b5347aec 100644 --- a/api/app/controllers/api/v1/rental_orders_api_controller.rb +++ b/api/app/controllers/api/v1/rental_orders_api_controller.rb @@ -1,5 +1,4 @@ class Api::V1::RentalOrdersApiController < ApplicationController - def get_rental_order_index_for_admin_view @rental_orders = RentalOrder.with_groups_and_rental_item render json: fmt(ok, @rental_orders) @@ -11,14 +10,13 @@ def get_rental_order_show_for_admin_view end def fit_rental_order_index_for_admin_view(rental_orders) - rental_orders.map{ - |rental_order| + rental_orders.map do |rental_order| { "rental_order": rental_order, "rental_item": rental_order.rental_item, "group": rental_order.group } - } + end end # 絞り込み機能 @@ -29,31 +27,29 @@ def get_refinement_rental_orders @rental_orders = RentalOrder.preload(:group) - if fes_year_id != 0 - @rental_orders = @rental_orders.joins(:group).where(groups: { fes_year_id: fes_year_id }) - end + @rental_orders = @rental_orders.joins(:group).where(groups: { fes_year_id: fes_year_id }) if fes_year_id != 0 - if rental_item_id != 0 - @rental_orders = @rental_orders.where("rental_item_id = ?", rental_item_id) - end + @rental_orders = @rental_orders.where('rental_item_id = ?', rental_item_id) if rental_item_id != 0 if group_category_id != 0 @rental_orders = @rental_orders.joins(:group).where(groups: { group_category_id: group_category_id }) end if @rental_orders.count == 0 - render json: fmt(not_found, [], "Not found rental_orders") - else + render json: fmt(not_found, [], 'Not found rental_orders') + else render json: fmt(ok, fit_rental_order_index_for_admin_view(@rental_orders)) end end - #あいまい検索 + # あいまい検索 def get_search_rental_orders word = params[:word] - @rental_orders = RentalOrder.preload(:group).map{ |rental_order| rental_order if rental_order.group.name.include?(word) }.compact + @rental_orders = RentalOrder.preload(:group).map do |rental_order| + rental_order if rental_order.group.name.include?(word) + end.compact if @rental_orders.count == 0 - render json: fmt(not_found, [], "Not found rental_orders") + render json: fmt(not_found, [], 'Not found rental_orders') else render json: fmt(ok, fit_rental_order_index_for_admin_view(@rental_orders)) end @@ -72,23 +68,24 @@ def get_rental_orders_with_unassigned_num elsif rental_item_id != 0 @rental_orders = RentalOrder.where(rental_item_id: rental_item_id) end - + output = [] - if(@rental_orders.length != 0) - + if @rental_orders.length != 0 + # place_idが指定なし if place_id == 0 @rental_orders.each do |rental_order| - unassigned_num = rental_order.num - AssignRentalItem.where(group_id: rental_order.group_id, rental_item_id: rental_order.rental_item_id).sum(:num) - if(place_order = rental_order.group.place_order) - if(assign_group_place = place_order.assign_group_place) - assign_place = assign_group_place.place.name - else - assign_place = 'not yet' - end - else - assign_place = 'not yet' - end + unassigned_num = rental_order.num - AssignRentalItem.where(group_id: rental_order.group_id, + rental_item_id: rental_order.rental_item_id).sum(:num) + assign_place = if (place_order = rental_order.group.place_order) + if (assign_group_place = place_order.assign_group_place) + assign_group_place.place.name + else + 'not yet' + end + else + 'not yet' + end temp = { id: rental_order.id, @@ -96,7 +93,7 @@ def get_rental_orders_with_unassigned_num assign_place: assign_place, rental_item: rental_order.rental_item.name, num: rental_order.num, - unassigned_num: unassigned_num, + unassigned_num: unassigned_num } output << temp end @@ -106,33 +103,33 @@ def get_rental_orders_with_unassigned_num # place_idが指定 elsif place_id != 0 @rental_orders.each do |rental_order| - if(place_order = rental_order.group.place_order) - if(assign_group_place = place_order.assign_group_place) - if(assign_group_place.place_id == place_id) - unassigned_num = rental_order.num - AssignRentalItem.where(group_id: rental_order.group_id, rental_item_id: rental_order.rental_item_id).sum(:num) - temp = { - id: rental_order.id, - group_name: rental_order.group.name, - assign_place: assign_group_place.place.name, - rental_item: rental_order.rental_item.name, - num: rental_order.num, - unassigned_num: unassigned_num, - } - output << temp - end - end - end + next unless (place_order = rental_order.group.place_order) + + next unless (assign_group_place = place_order.assign_group_place) + + next unless assign_group_place.place_id == place_id + + unassigned_num = rental_order.num - AssignRentalItem.where(group_id: rental_order.group_id, + rental_item_id: rental_order.rental_item_id).sum(:num) + temp = { + id: rental_order.id, + group_name: rental_order.group.name, + assign_place: assign_group_place.place.name, + rental_item: rental_order.rental_item.name, + num: rental_order.num, + unassigned_num: unassigned_num + } + output << temp end - if(output.length != 0) + if output.length != 0 render json: fmt(ok, output) else - render json: fmt(not_found, [], "Not found stocker_items") + render json: fmt(not_found, [], 'Not found stocker_items') end end else - render json: fmt(not_found, [], "Not found stocker_items") + render json: fmt(not_found, [], 'Not found stocker_items') end end - -end \ No newline at end of file +end diff --git a/api/app/controllers/api/v1/representatives_api_controller.rb b/api/app/controllers/api/v1/representatives_api_controller.rb index 26f9aa9c2..edcd0f1b4 100644 --- a/api/app/controllers/api/v1/representatives_api_controller.rb +++ b/api/app/controllers/api/v1/representatives_api_controller.rb @@ -1,43 +1,41 @@ class Api::V1::RepresentativesApiController < ApplicationController - # sub_repがない場合はnilが入ったsub_repみたいなのを返す @@no_sub_rep = { - id: nil, - name: nil, - department_id: nil, - grade_id: nil, - tel: nil, - email: nil, - created_at: nil, - updated_at: nil, - student_id: nil - } + id: nil, + name: nil, + department_id: nil, + grade_id: nil, + tel: nil, + email: nil, + created_at: nil, + updated_at: nil, + student_id: nil + } def fit_representatives_index_for_admin_view(groups) - groups.map{ - |group| + groups.map do |group| { "user": group.user, "group": group, "sub_rep": group.sub_rep.nil? ? @@no_sub_rep : group.sub_rep } - } + end end # 絞り込み機能 def get_refinement_represantatives fes_year_id = params[:fes_year_id].to_i # 指定なし - if fes_year_id == 0 - @groups = Group.all - #fes_year_id指定 - else - @groups = Group.where(fes_year_id: fes_year_id) - end + @groups = if fes_year_id == 0 + Group.all + # fes_year_id指定 + else + Group.where(fes_year_id: fes_year_id) + end if @groups.count == 0 - render json: fmt(not_found, [], "Not found representatives") - else + render json: fmt(not_found, [], 'Not found representatives') + else render json: fmt(ok, fit_representatives_index_for_admin_view(@groups)) end end @@ -45,20 +43,19 @@ def get_refinement_represantatives # あいまい検索の対象かどうか def is_search_condition(group, word) # 副代表が存在しない場合 - if group.sub_rep.nil? - return group.name.include?(word) || group.user.name.include?(word) + return group.name.include?(word) || group.user.name.include?(word) if group.sub_rep.nil? + # 副代表が存在する場合 - else - return group.name.include?(word) || group.user.name.include?(word) || group.sub_rep.name.include?(word) - end + + group.name.include?(word) || group.user.name.include?(word) || group.sub_rep.name.include?(word) end # あいまい検索機能 def get_search_representatives word = params[:word] - @groups = Group.all.map{ |group| group if is_search_condition(group, word) }.compact + @groups = Group.all.map { |group| group if is_search_condition(group, word) }.compact if @groups.count == 0 - render json: fmt(not_found, [], "Not found representatives") + render json: fmt(not_found, [], 'Not found representatives') else render json: fmt(ok, fit_representatives_index_for_admin_view(@groups)) end diff --git a/api/app/controllers/api/v1/stage_common_options_api_controller.rb b/api/app/controllers/api/v1/stage_common_options_api_controller.rb index 78c963aca..1eb47360f 100644 --- a/api/app/controllers/api/v1/stage_common_options_api_controller.rb +++ b/api/app/controllers/api/v1/stage_common_options_api_controller.rb @@ -1,5 +1,4 @@ class Api::V1::StageCommonOptionsApiController < ApplicationController - def get_stage_common_option_index_for_admin_view @stage_common_options = StageCommonOption.with_groups render json: fmt(ok, @stage_common_options) @@ -12,16 +11,15 @@ def get_stage_common_option_show_for_admin_view # admin_pageのviewの形に整える def fit_stage_common_option_index_for_admin_view(stage_common_options) - stage_common_options.map{ - |stage_common_option| + stage_common_options.map do |stage_common_option| { "stage_common_option": stage_common_option, - "group": stage_common_option.group.nil? ? nil : stage_common_option.group, + "group": stage_common_option.group.nil? ? nil : stage_common_option.group } - } + end end - #絞り込み機能 + # 絞り込み機能 def get_refinement_stage_common_options fes_year_id = params[:fes_year_id].to_i own_equipment = params[:own_equipment].to_i @@ -35,37 +33,36 @@ def get_refinement_stage_common_options # own_equipment, bgm, camera_permission, loud_soundで絞り込み if own_equipment != 0 - @stage_common_options = @stage_common_options.where("(own_equipment = ?)", option_list[own_equipment]) - end - if bgm != 0 - @stage_common_options = @stage_common_options.where("(bgm = ?)", option_list[bgm]) + @stage_common_options = @stage_common_options.where('(own_equipment = ?)', option_list[own_equipment]) end + @stage_common_options = @stage_common_options.where('(bgm = ?)', option_list[bgm]) if bgm != 0 if camera_permission != 0 - @stage_common_options = @stage_common_options.where("(camera_permission = ?)", option_list[camera_permission]) - end - if loud_sound != 0 - @stage_common_options = @stage_common_options.where("(loud_sound = ?)", option_list[loud_sound]) + @stage_common_options = @stage_common_options.where('(camera_permission = ?)', option_list[camera_permission]) end + @stage_common_options = @stage_common_options.where('(loud_sound = ?)', option_list[loud_sound]) if loud_sound != 0 if fes_year_id != 0 - @stage_common_options = @stage_common_options.preload(:group).map{ |stage_common_option| stage_common_option if stage_common_option.group.fes_year_id == fes_year_id }.compact + @stage_common_options = @stage_common_options.preload(:group).map do |stage_common_option| + stage_common_option if stage_common_option.group.fes_year_id == fes_year_id + end.compact end if @stage_common_options.count == 0 - render json: fmt(not_found, [], "Not found stage_common_options") + render json: fmt(not_found, [], 'Not found stage_common_options') else - render json: fmt(ok, fit_stage_common_option_index_for_admin_view(@stage_common_options)) + render json: fmt(ok, fit_stage_common_option_index_for_admin_view(@stage_common_options)) end end - #あいまい検索 + # あいまい検索 def get_search_stage_common_options word = params[:word] - @stage_common_options = StageCommonOption.preload(:group).map{ |stage_common_option| stage_common_option if stage_common_option.group.name.include?(word) }.compact + @stage_common_options = StageCommonOption.preload(:group).map do |stage_common_option| + stage_common_option if stage_common_option.group.name.include?(word) + end.compact if @stage_common_options.count == 0 - render json: fmt(not_found, [], "Not found stage_common_options") + render json: fmt(not_found, [], 'Not found stage_common_options') else render json: fmt(ok, fit_stage_common_option_index_for_admin_view(@stage_common_options)) end end - end diff --git a/api/app/controllers/api/v1/stage_orders_api_controller.rb b/api/app/controllers/api/v1/stage_orders_api_controller.rb index 9768e4a2d..31cd9eec3 100644 --- a/api/app/controllers/api/v1/stage_orders_api_controller.rb +++ b/api/app/controllers/api/v1/stage_orders_api_controller.rb @@ -1,5 +1,4 @@ class Api::V1::StageOrdersApiController < ApplicationController - def get_stage_order_index_for_admin_view @stage_orders = StageOrder.with_groups render json: fmt(ok, @stage_orders) @@ -11,17 +10,16 @@ def get_stage_order_show_for_admin_view end def fit_stage_order_index_for_admin_view(stage_orders) - stage_orders.map{ - |stage_order| + stage_orders.map do |stage_order| { "stage_order": stage_order, "stage_order_info": stage_order.to_info_h, "group": stage_order.group } - } + end end - #絞り込み機能 + # 絞り込み機能 def get_refinement_stage_orders fes_year_id = params[:fes_year_id].to_i days_num = params[:days_num].to_i @@ -33,43 +31,34 @@ def get_refinement_stage_orders @stage_orders = StageOrder.all # fes_year_idで絞り込み - if fes_year_id != 0 - @stage_orders = @stage_orders.joins(:group).where(groups: { fes_year_id: fes_year_id }) - end + @stage_orders = @stage_orders.joins(:group).where(groups: { fes_year_id: fes_year_id }) if fes_year_id != 0 # days_numで絞り込み - if days_num != 0 - @stage_orders = @stage_orders.joins(:fes_date).where(fes_dates: { days_num: days_num }) - end + @stage_orders = @stage_orders.joins(:fes_date).where(fes_dates: { days_num: days_num }) if days_num != 0 # stage_idで絞り込み - if stage_id != 0 - @stage_orders = @stage_orders.where("(stage_first = ?) OR (stage_second = ?)", stage_id, stage_id) - end + @stage_orders = @stage_orders.where('(stage_first = ?) OR (stage_second = ?)', stage_id, stage_id) if stage_id != 0 # is_sunnyで絞り込み - if is_sunny != 0 - @stage_orders = @stage_orders.where(is_sunny: is_sunny_list[is_sunny]) - end + @stage_orders = @stage_orders.where(is_sunny: is_sunny_list[is_sunny]) if is_sunny != 0 if @stage_orders.empty? - render json: fmt(not_found, [], "Not found stage_orders") + render json: fmt(not_found, [], 'Not found stage_orders') else render json: fmt(ok, fit_stage_order_index_for_admin_view(@stage_orders)) end end - - #あいまい検索 + # あいまい検索 def get_search_stage_orders word = params[:word] - @stage_orders = StageOrder.preload(:group).map{ |stage_order| stage_order if stage_order.group.name.include?(word) }.compact + @stage_orders = StageOrder.preload(:group).map do |stage_order| + stage_order if stage_order.group.name.include?(word) + end.compact if @stage_orders.count == 0 - render json: fmt(not_found, [], "Not found stage_orders") + render json: fmt(not_found, [], 'Not found stage_orders') else render json: fmt(ok, fit_stage_order_index_for_admin_view(@stage_orders)) end end - - end diff --git a/api/app/controllers/api/v1/stocker_items_api_controller.rb b/api/app/controllers/api/v1/stocker_items_api_controller.rb index f58ec6c5a..b1ef0f4ab 100644 --- a/api/app/controllers/api/v1/stocker_items_api_controller.rb +++ b/api/app/controllers/api/v1/stocker_items_api_controller.rb @@ -1,43 +1,43 @@ class Api::V1::StockerItemsApiController < ApplicationController - def get_stocker_items_with_remaining_num - rental_item_id = params[:rental_item_id].to_i - stocker_place_id = params[:stocker_place_id].to_i - - # 両方ともALL - if rental_item_id == 0 && stocker_place_id == 0 - @stocker_items = StockerItem.all - - # rental_item_idだけ指定 - elsif rental_item_id != 0 && stocker_place_id == 0 - @stocker_items = StockerItem.where(rental_item_id: rental_item_id) - - # stocker_place_idだけ指定 - elsif rental_item_id == 0 && stocker_place_id != 0 - @stocker_items = StockerItem.where(stocker_place_id: stocker_place_id) - - # 両方とも指定 - elsif rental_item_id != 0 && stocker_place_id != 0 - @stocker_items = StockerItem.where(rental_item_id: rental_item_id, stocker_place_id: stocker_place_id) - end - - output = [] - if(@stocker_items.length != 0) - @stocker_items.each do |stocker_item| - remaining_num = stocker_item.num - AssignRentalItem.where( rental_item_id: stocker_item.rental_item_id, stocker_place_id: stocker_item.stocker_place_id).sum(:num) - temp = { - id: stocker_item.id, - fes_year_id: stocker_item.fes_year_id, - rental_item: stocker_item.rental_item.name, - stocker_place: stocker_item.stocker_place.name, - num: stocker_item.num, - remaining_num: remaining_num, - } - output << temp - end - render json: fmt(ok, output) - else - render json: fmt(not_found, [], "Not found stocker_items") + def get_stocker_items_with_remaining_num + rental_item_id = params[:rental_item_id].to_i + stocker_place_id = params[:stocker_place_id].to_i + + # 両方ともALL + if rental_item_id == 0 && stocker_place_id == 0 + @stocker_items = StockerItem.all + + # rental_item_idだけ指定 + elsif rental_item_id != 0 && stocker_place_id == 0 + @stocker_items = StockerItem.where(rental_item_id: rental_item_id) + + # stocker_place_idだけ指定 + elsif rental_item_id == 0 && stocker_place_id != 0 + @stocker_items = StockerItem.where(stocker_place_id: stocker_place_id) + + # 両方とも指定 + elsif rental_item_id != 0 && stocker_place_id != 0 + @stocker_items = StockerItem.where(rental_item_id: rental_item_id, stocker_place_id: stocker_place_id) + end + + output = [] + if @stocker_items.length != 0 + @stocker_items.each do |stocker_item| + remaining_num = stocker_item.num - AssignRentalItem.where(rental_item_id: stocker_item.rental_item_id, + stocker_place_id: stocker_item.stocker_place_id).sum(:num) + temp = { + id: stocker_item.id, + fes_year_id: stocker_item.fes_year_id, + rental_item: stocker_item.rental_item.name, + stocker_place: stocker_item.stocker_place.name, + num: stocker_item.num, + remaining_num: remaining_num + } + output << temp end + render json: fmt(ok, output) + else + render json: fmt(not_found, [], 'Not found stocker_items') end - -end \ No newline at end of file + end +end diff --git a/api/app/controllers/api/v1/sub_rep_api_controller.rb b/api/app/controllers/api/v1/sub_rep_api_controller.rb index 909ea46c0..915372de9 100644 --- a/api/app/controllers/api/v1/sub_rep_api_controller.rb +++ b/api/app/controllers/api/v1/sub_rep_api_controller.rb @@ -1,14 +1,12 @@ class Api::V1::SubRepApiController < ApplicationController - # あいまい検索機能 def get_search_sub_reps word = params[:word] - @sub_reps = SubRep.where("name like ? or email like ?", "%#{word}%", "%#{word}%") + @sub_reps = SubRep.where('name like ? or email like ?', "%#{word}%", "%#{word}%") if @sub_reps.count == 0 - render json: fmt(not_found, [], "Not found sub_reps") + render json: fmt(not_found, [], 'Not found sub_reps') else render json: fmt(ok, @sub_reps) end end - end diff --git a/api/app/controllers/api/v1/users_controller.rb b/api/app/controllers/api/v1/users_controller.rb index f9fc55bd5..9e182b893 100644 --- a/api/app/controllers/api/v1/users_controller.rb +++ b/api/app/controllers/api/v1/users_controller.rb @@ -1,6 +1,6 @@ class Api::V1::UsersController < ApplicationController # before_action :authenticate_api_user! - + def get_user_index_for_admin_view @users = User.with_user_details render json: fmt(ok, @users) @@ -22,18 +22,16 @@ def get_representative_show_for_admin_view render json: fmt(ok, @user) end - #admin_pageのviewの形に整える + # admin_pageのviewの形に整える def fit_user_index_for_admin_view(users) - users.map{ - |user| + users.map do |user| { "user": user, "role": user.role } - } + end end - # 絞り込み機能 def get_refinement_users role_id = params[:role_id].to_i @@ -44,8 +42,8 @@ def get_refinement_users end if @users.count == 0 - render json: fmt(not_found, [], "Not found users") - else + render json: fmt(not_found, [], 'Not found users') + else render json: fmt(ok, fit_user_index_for_admin_view(@users)) end end @@ -53,9 +51,9 @@ def get_refinement_users # あいまい検索機能 def get_search_users word = params[:word] - @users = User.where("name like ? or email like ?", "%#{word}%", "%#{word}%") + @users = User.where('name like ? or email like ?', "%#{word}%", "%#{word}%") if @users.count == 0 - render json: fmt(not_found, [], "Not found groups") + render json: fmt(not_found, [], 'Not found groups') else render json: fmt(ok, fit_user_index_for_admin_view(@users)) end @@ -68,7 +66,7 @@ def show render json: fmt(ok, @user) end - ### これ使ってる? + ### これ使ってる? def update @user = User.find(params[:id]) role_id = params[:role_id] @@ -76,16 +74,15 @@ def update render json: @user end - def edit_user_info @user = User.find(edit_user_info_params[:user_id]) @user_detail = @user.user_detail - @user.name = edit_user_info_params[:name] - @user.email = edit_user_info_params[:email] - @user_detail.student_id = edit_user_info_params[:student_id] - @user_detail.grade_id = edit_user_info_params[:grade_id] - @user_detail.department_id = edit_user_info_params[:department_id] - @user_detail.tel = edit_user_info_params[:tel] + @user.name = edit_user_info_params[:name] + @user.email = edit_user_info_params[:email] + @user_detail.student_id = edit_user_info_params[:student_id] + @user_detail.grade_id = edit_user_info_params[:grade_id] + @user_detail.department_id = edit_user_info_params[:department_id] + @user_detail.tel = edit_user_info_params[:tel] @user.save! @user_detail.save! end @@ -95,16 +92,16 @@ def reset_password @user.password = reset_password_params[:password] @user.password_confirmation = reset_password_params[:password_confirmation] @user.save! - render json: fmt(ok, [], "Updated password user_id = "+params[:user_id]) + render json: fmt(ok, [], 'Updated password user_id = ' + params[:user_id]) end private - - def edit_user_info_params - params.permit(:user_id, :name, :student_id, :grade_id, :department_id, :tel, :email) - end - def reset_password_params - params.permit(:user_id, :password, :password_confirmation) - end + def edit_user_info_params + params.permit(:user_id, :name, :student_id, :grade_id, :department_id, :tel, :email) + end + + def reset_password_params + params.permit(:user_id, :password, :password_confirmation) + end end diff --git a/api/app/controllers/api/v1/venue_maps_api_controller.rb b/api/app/controllers/api/v1/venue_maps_api_controller.rb index 5bb32563c..757ce1107 100644 --- a/api/app/controllers/api/v1/venue_maps_api_controller.rb +++ b/api/app/controllers/api/v1/venue_maps_api_controller.rb @@ -1,49 +1,46 @@ class Api::V1::VenueMapsApiController < ApplicationController + def get_venue_map_for_admin_view + @groups = Group.with_venue_map(params[:id]) + render json: fmt(ok, @groups) + end - def get_venue_map_for_admin_view - @groups = Group.with_venue_map(params[:id]) - render json: fmt(ok, @groups) - end - - # admin_viewのvenue_map/indexの形に整える - def fit_group_index_for_admin_view(groups) - groups.map{ - |group| - { - "group": group, - "group_category": group.group_category, - "fes_year": group.fes_year - } + # admin_viewのvenue_map/indexの形に整える + def fit_group_index_for_admin_view(groups) + groups.map do |group| + { + "group": group, + "group_category": group.group_category, + "fes_year": group.fes_year } end + end - # 絞り込み機能 - def get_refinement_venue_maps - fes_year_id = params[:fes_year_id].to_i - # 両方ともALL - if fes_year_id == 0 - @groups = Group.with_venue_maps - # fes_year_idだけ指定 - elsif fes_year_id != 0 - @groups = Group.with_venue_map_narrow_down_by_fes_year(fes_year_id) - end - - if @groups.count == 0 - render json: fmt(not_found, [], "Not found groups") - else - render json: fmt(ok, @groups) - end + # 絞り込み機能 + def get_refinement_venue_maps + fes_year_id = params[:fes_year_id].to_i + # 両方ともALL + if fes_year_id == 0 + @groups = Group.with_venue_maps + # fes_year_idだけ指定 + elsif fes_year_id != 0 + @groups = Group.with_venue_map_narrow_down_by_fes_year(fes_year_id) end - # あいまい検索機能 - def get_search_venue_maps - word = params[:word] - @groups = Group.with_venue_map_narrow_down_by_search_word(word) - if @groups.count == 0 - render json: fmt(not_found, [], "Not found groups") - else - render json: fmt(ok, @groups) - end + if @groups.count == 0 + render json: fmt(not_found, [], 'Not found groups') + else + render json: fmt(ok, @groups) end + end + # あいまい検索機能 + def get_search_venue_maps + word = params[:word] + @groups = Group.with_venue_map_narrow_down_by_search_word(word) + if @groups.count == 0 + render json: fmt(not_found, [], 'Not found groups') + else + render json: fmt(ok, @groups) + end end +end diff --git a/api/app/controllers/application_controller.rb b/api/app/controllers/application_controller.rb index 419d422a6..f074107b3 100644 --- a/api/app/controllers/application_controller.rb +++ b/api/app/controllers/application_controller.rb @@ -1,20 +1,32 @@ class ApplicationController < ActionController::API include DeviseTokenAuth::Concerns::SetUserByToken - + # status - def ok; return { code: 200, message: 'Success' } end - def created; return { code: 201, message: 'Created'} end - def not_found; return { code: 404, message: 'Not Found' } end - def internal_server_error; return { code: 500, message: 'Internal Server Error' } end - def undefined; return { code: 999, message: 'Undefined' } end + def ok + { code: 200, message: 'Success' } + end + + def created + { code: 201, message: 'Created' } + end + + def not_found + { code: 404, message: 'Not Found' } + end + + def internal_server_error + { code: 500, message: 'Internal Server Error' } + end + + def undefined + { code: 999, message: 'Undefined' } + end # 出力するAPIのフォーマット - def fmt(status=undefined, data=[], option="") + def fmt(status = undefined, data = [], option = '') # メッセージを追加したいときに使う - if option != "" - status.store("option", option) - end - return { status: status, data: data } - #return { status: status, path: request.fullpath, data: data } // fullpathいるかな? + status.store('option', option) if option != '' + { status: status, data: data } + # return { status: status, path: request.fullpath, data: data } // fullpathいるかな? end end diff --git a/api/app/controllers/assign_group_places_controller.rb b/api/app/controllers/assign_group_places_controller.rb index 23697f826..f6cdee57f 100644 --- a/api/app/controllers/assign_group_places_controller.rb +++ b/api/app/controllers/assign_group_places_controller.rb @@ -1,5 +1,5 @@ class AssignGroupPlacesController < ApplicationController - before_action :set_assign_group_place, only: [:show, :update, :destroy] + before_action :set_assign_group_place, only: %i[show update destroy] # GET /assign_group_places # GET /assign_group_places.json @@ -25,28 +25,29 @@ def create # PATCH/PUT /assign_group_places/1.json def update @assign_group_place.update(assign_group_place_params) - render json: fmt(created, @assign_group_place, "Updated assign_group_place id = "+params[:id]) + render json: fmt(created, @assign_group_place, 'Updated assign_group_place id = ' + params[:id]) end # DELETE /assign_group_places/1 # DELETE /assign_group_places/1.json def destroy @assign_group_place.destroy - render json: fmt(ok, [], "Deleted assign_group_place = "+params[:id]) + render json: fmt(ok, [], 'Deleted assign_group_place = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_assign_group_place - if AssignGroupPlace.exists?(params[:id]) - @assign_group_place = AssignGroupPlace.find(params[:id]) - else - render json: fmt(not_found, [], "Not found assign_group_place = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def assign_group_place_params - params.permit(:place_order_id, :place_id) + # Use callbacks to share common setup or constraints between actions. + def set_assign_group_place + if AssignGroupPlace.exists?(params[:id]) + @assign_group_place = AssignGroupPlace.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found assign_group_place = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def assign_group_place_params + params.permit(:place_order_id, :place_id) + end end diff --git a/api/app/controllers/assign_rental_items_controller.rb b/api/app/controllers/assign_rental_items_controller.rb index 92bcfa30c..c0243aa10 100644 --- a/api/app/controllers/assign_rental_items_controller.rb +++ b/api/app/controllers/assign_rental_items_controller.rb @@ -1,5 +1,5 @@ class AssignRentalItemsController < ApplicationController - before_action :set_assign_rental_item, only: [:show, :update, :destroy] + before_action :set_assign_rental_item, only: %i[show update destroy] # GET /assign_rental_items # GET /assign_rental_items.json @@ -36,28 +36,29 @@ def create # PATCH/PUT /assign_rental_items/1.json def update @assign_rental_item.update(assign_rental_item_params) - render json: fmt(created, @assign_rental_item, "Updated assign_rental_item id = "+params[:id]) + render json: fmt(created, @assign_rental_item, 'Updated assign_rental_item id = ' + params[:id]) end # DELETE /assign_rental_items/1 # DELETE /assign_rental_items/1.json def destroy @assign_rental_item.destroy - render json: fmt(ok, [], "Deleted assign_rental_item = "+params[:id]) + render json: fmt(ok, [], 'Deleted assign_rental_item = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_assign_rental_item - if AssignRentalItem.exists?(params[:id]) - @assign_rental_item = AssignRentalItem.find(params[:id]) - else - render json: fmt(not_found, [], "Not found assign_rental_item = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def assign_rental_items_params - params.permit(:rentalItemId, :stockerPlaceId, items: [:group_id, :num]) + # Use callbacks to share common setup or constraints between actions. + def set_assign_rental_item + if AssignRentalItem.exists?(params[:id]) + @assign_rental_item = AssignRentalItem.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found assign_rental_item = ' + params[:id]) end end + + # Only allow a list of trusted parameters through. + def assign_rental_items_params + params.permit(:rentalItemId, :stockerPlaceId, items: %i[group_id num]) + end +end diff --git a/api/app/controllers/assign_stages_controller.rb b/api/app/controllers/assign_stages_controller.rb index 32f86eba5..8ac6b683f 100644 --- a/api/app/controllers/assign_stages_controller.rb +++ b/api/app/controllers/assign_stages_controller.rb @@ -1,5 +1,5 @@ class AssignStagesController < ApplicationController - before_action :set_assign_stage, only: [:show, :update, :destroy] + before_action :set_assign_stage, only: %i[show update destroy] # GET /assign_stages # GET /assign_stages.json @@ -25,28 +25,29 @@ def create # PATCH/PUT /assign_stages/1.json def update @assign_stage.update(assign_stage_params) - render json: fmt(created, @assign_stage, "Updated assign_stage id = "+params[:id]) + render json: fmt(created, @assign_stage, 'Updated assign_stage id = ' + params[:id]) end # DELETE /assign_stages/1 # DELETE /assign_stages/1.json def destroy @assign_stage.destroy - render json: fmt(ok, [], "Deleted assign_stage = "+params[:id]) + render json: fmt(ok, [], 'Deleted assign_stage = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_assign_stage - if AssignStage.exists?(params[:id]) - @assign_stage = AssignStage.find(params[:id]) - else - render json: fmt(not_found, [], "Not found assign_stage = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def assign_stage_params - params.permit(:stage_order_id, :stage_id, :time_point_start, :time_point_end) + # Use callbacks to share common setup or constraints between actions. + def set_assign_stage + if AssignStage.exists?(params[:id]) + @assign_stage = AssignStage.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found assign_stage = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def assign_stage_params + params.permit(:stage_order_id, :stage_id, :time_point_start, :time_point_end) + end end diff --git a/api/app/controllers/contact_persons_controller.rb b/api/app/controllers/contact_persons_controller.rb index 38fa19041..56338fe53 100644 --- a/api/app/controllers/contact_persons_controller.rb +++ b/api/app/controllers/contact_persons_controller.rb @@ -1,54 +1,55 @@ class ContactPersonsController < ApplicationController -before_action :set_contact_person, only: [:show, :update, :destroy] + before_action :set_contact_person, only: %i[show update destroy] - # GET /contact_persons - # GET /contact_persons.json - def index - @contact_persons = ContactPerson.all - render json: @contact_persons - end + # GET /contact_persons + # GET /contact_persons.json + def index + @contact_persons = ContactPerson.all + render json: @contact_persons + end - # GET /contact_persons/1 - # GET /contact_persons/1.json - def show - render json: @contact_person - end + # GET /contact_persons/1 + # GET /contact_persons/1.json + def show + render json: @contact_person + end - # POST /contact_persons - # POST /contact_persons.json - def create - @contact_person = ContactPerson.new(contact_person_params) - if @contact_person.save - render json: @contact_person - else - render json: @contact_person.errors, status: :unprocessable_entity - end + # POST /contact_persons + # POST /contact_persons.json + def create + @contact_person = ContactPerson.new(contact_person_params) + if @contact_person.save + render json: @contact_person + else + render json: @contact_person.errors, status: :unprocessable_entity end + end - # PATCH/PUT /contact_persons/1 - # PATCH/PUT /contact_persons/1.json - def update - if @contact_person.update(contact_person_params) - render json: @contact_person - else - render json: @contact_person.errors, status: :unprocessable_entity - end + # PATCH/PUT /contact_persons/1 + # PATCH/PUT /contact_persons/1.json + def update + if @contact_person.update(contact_person_params) + render json: @contact_person + else + render json: @contact_person.errors, status: :unprocessable_entity end + end - # DELETE /contact_persons/1 - # DELETE /contact_persons/1.json - def destroy - @contact_person.destroy - end + # DELETE /contact_persons/1 + # DELETE /contact_persons/1.json + def destroy + @contact_person.destroy + end private - # Use callbacks to share common setup or constraints between actions. - def set_contact_person - @contact_person = ContactPerson.find(params[:id]) - end - # Only allow a list of trusted parameters through. - def contact_person_params - params.require(:contact_person).permit(:group_id, :name, :email) - end + # Use callbacks to share common setup or constraints between actions. + def set_contact_person + @contact_person = ContactPerson.find(params[:id]) + end + + # Only allow a list of trusted parameters through. + def contact_person_params + params.require(:contact_person).permit(:group_id, :name, :email) + end end diff --git a/api/app/controllers/cooking_process_orders_controller.rb b/api/app/controllers/cooking_process_orders_controller.rb index 02623d39a..ff363a0ad 100644 --- a/api/app/controllers/cooking_process_orders_controller.rb +++ b/api/app/controllers/cooking_process_orders_controller.rb @@ -1,5 +1,5 @@ class CookingProcessOrdersController < ApplicationController - before_action :set_cooking_process_order, only: [:show, :update, :destroy] + before_action :set_cooking_process_order, only: %i[show update destroy] # GET /cooking_process_orders def index @@ -26,25 +26,26 @@ def create # PATCH/PUT /cooking_process_orders/1 def update @cooking_process_order.update(cooking_process_order_params) - render json: fmt(created, @cooking_process_order, "Updated cooking process order id = " + params[:id]) + render json: fmt(created, @cooking_process_order, 'Updated cooking process order id = ' + params[:id]) end # DELETE /cooking_process_orders/1 def destroy @cooking_process_order.destroy - render json: fmt(ok, [], "Deleted cooking process order id = " + params[:id]) + render json: fmt(ok, [], 'Deleted cooking process order id = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions - def set_cooking_process_order - @cooking_process_order = CookingProcessOrder.find(params[:id]) - rescue ActiveRecord::RecordNotFound - render json: { error: "Not found" }, status: :not_found - end - # Only allow a list of trusted parameters through - def cooking_process_order_params - params.require(:cooking_process_order).permit(:pre_open_kitchen, :during_open_kitchen, :tent) - end + # Use callbacks to share common setup or constraints between actions + def set_cooking_process_order + @cooking_process_order = CookingProcessOrder.find(params[:id]) + rescue ActiveRecord::RecordNotFound + render json: { error: 'Not found' }, status: :not_found + end + + # Only allow a list of trusted parameters through + def cooking_process_order_params + params.require(:cooking_process_order).permit(:pre_open_kitchen, :during_open_kitchen, :tent) + end end diff --git a/api/app/controllers/current_stocks_controller.rb b/api/app/controllers/current_stocks_controller.rb index ec0d1179d..216384dc8 100644 --- a/api/app/controllers/current_stocks_controller.rb +++ b/api/app/controllers/current_stocks_controller.rb @@ -1,5 +1,5 @@ class CurrentStocksController < ApplicationController - before_action :set_current_stock, only: [:show, :update, :destroy] + before_action :set_current_stock, only: %i[show update destroy] # GET /current_stocks # GET /current_stocks.json @@ -25,28 +25,29 @@ def create # PATCH/PUT /current_stocks/1.json def update @current_stock.update(current_stock_params) - render json: fmt(created, @current_stock, "Updated current_stock id = "+params[:id]) + render json: fmt(created, @current_stock, 'Updated current_stock id = ' + params[:id]) end # DELETE /current_stocks/1 # DELETE /current_stocks/1.json def destroy @current_stock.destroy - render json: fmt(ok, [], "Deleted current_stock id = "+params[:id]) + render json: fmt(ok, [], 'Deleted current_stock id = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_current_stock - if CurrentStock.exists?(params[:id]) - @current_stock = CurrentStock.find(params[:id]) - else - render json: fmt(not_found, [], "Not found current_stock id = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def current_stock_params - params.permit(:group_id, :stock_id, :number) + # Use callbacks to share common setup or constraints between actions. + def set_current_stock + if CurrentStock.exists?(params[:id]) + @current_stock = CurrentStock.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found current_stock id = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def current_stock_params + params.permit(:group_id, :stock_id, :number) + end end diff --git a/api/app/controllers/employees_controller.rb b/api/app/controllers/employees_controller.rb index ef99f6208..71b506680 100644 --- a/api/app/controllers/employees_controller.rb +++ b/api/app/controllers/employees_controller.rb @@ -1,5 +1,5 @@ class EmployeesController < ApplicationController - before_action :set_employee, only: [:show, :update, :destroy] + before_action :set_employee, only: %i[show update destroy] # GET /employees # GET /employees.json @@ -25,28 +25,29 @@ def create # PATCH/PUT /employees/1.json def update @employee.update(employee_params) - render json: fmt(created, @employee, "Updated employee id = "+params[:id]) + render json: fmt(created, @employee, 'Updated employee id = ' + params[:id]) end # DELETE /employees/1 # DELETE /employees/1.json def destroy @employee.destroy - render json: fmt(ok ,[], "Deleted employee = "+params[:id]) + render json: fmt(ok, [], 'Deleted employee = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_employee - if Employee.exists?(params[:id]) - @employee = Employee.find(params[:id]) - else - render json: fmt(not_found, [], "Not found employee = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def employee_params - params.permit(:group_id, :name, :student_id, :stool_test_id) + # Use callbacks to share common setup or constraints between actions. + def set_employee + if Employee.exists?(params[:id]) + @employee = Employee.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found employee = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def employee_params + params.permit(:group_id, :name, :student_id, :stool_test_id) + end end diff --git a/api/app/controllers/fes_dates_controller.rb b/api/app/controllers/fes_dates_controller.rb index 7cc700905..cd53c4c15 100644 --- a/api/app/controllers/fes_dates_controller.rb +++ b/api/app/controllers/fes_dates_controller.rb @@ -1,54 +1,53 @@ class FesDatesController < ApplicationController - before_action :set_fes_date, only: [:show, :update, :destroy] - - def index - @fes_dates = FesDate.preload(:fes_year) - .map{ - |fes_date| - { - "fes_date": fes_date, - "fes_year": fes_date.fes_year - } - } - render json: fmt(ok, @fes_dates) - end - - def show - fes_date = { - "fes_date": @fes_date, - "fes_year": @fes_date.fes_year + before_action :set_fes_date, only: %i[show update destroy] + + def index + @fes_dates = FesDate.preload(:fes_year) + .map do |fes_date| + { + "fes_date": fes_date, + "fes_year": fes_date.fes_year } - render json: fmt(ok, fes_date) - end - - def create - @fes_date = FesDate.create(fes_date_params) - render json: fmt(created, @fes_date) - end - - def update - @fes_date.update(fes_date_params) - render json: fmt(created, @fes_date, "Updated fes_date id = "+params[:id]) end - - def destroy - @fes_date.destroy - render json: fmt(ok, [], "Deleted fes_date = "+params[:id]) + render json: fmt(ok, @fes_dates) + end + + def show + fes_date = { + "fes_date": @fes_date, + "fes_year": @fes_date.fes_year + } + render json: fmt(ok, fes_date) + end + + def create + @fes_date = FesDate.create(fes_date_params) + render json: fmt(created, @fes_date) + end + + def update + @fes_date.update(fes_date_params) + render json: fmt(created, @fes_date, 'Updated fes_date id = ' + params[:id]) + end + + def destroy + @fes_date.destroy + render json: fmt(ok, [], 'Deleted fes_date = ' + params[:id]) + end + + private + + # Use callbacks to share common setup or constraints between actions. + def set_fes_date + if FesDate.exists?(params[:id]) + @fes_date = FesDate.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found fes_date = ' + params[:id]) end - - private - # Use callbacks to share common setup or constraints between actions. - def set_fes_date - if FesDate.exists?(params[:id]) - @fes_date = FesDate.find(params[:id]) - else - render json: fmt(not_found, [], "Not found fes_date = "+params[:id]) - end - end - - # Only allow a list of trusted parameters through. - def fes_date_params - params.permit(:days_num, :date, :day, :fes_year_id) - end end - + + # Only allow a list of trusted parameters through. + def fes_date_params + params.permit(:days_num, :date, :day, :fes_year_id) + end +end diff --git a/api/app/controllers/fes_years_controller.rb b/api/app/controllers/fes_years_controller.rb index f13fb37dc..bc7a29a7d 100644 --- a/api/app/controllers/fes_years_controller.rb +++ b/api/app/controllers/fes_years_controller.rb @@ -1,5 +1,5 @@ class FesYearsController < ApplicationController - before_action :set_fes_year, only: [:show, :update, :destroy] + before_action :set_fes_year, only: %i[show update destroy] def index @fes_years = FesYear.all @@ -22,21 +22,22 @@ def update def destroy @fes_year.destroy - render json: fmt(ok, [], "Deleted fes_year = "+params[:id]) + render json: fmt(ok, [], 'Deleted fes_year = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_fes_year - if FesYear.exists?(params[:id]) - @fes_year = FesYear.find(params[:id]) - else - render json: fmt(not_found, [], "Not found fes_year = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def fes_year_params - params.permit(:year_num) + # Use callbacks to share common setup or constraints between actions. + def set_fes_year + if FesYear.exists?(params[:id]) + @fes_year = FesYear.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found fes_year = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def fes_year_params + params.permit(:year_num) + end end diff --git a/api/app/controllers/food_products_controller.rb b/api/app/controllers/food_products_controller.rb index 5ae613045..825cb7ac8 100644 --- a/api/app/controllers/food_products_controller.rb +++ b/api/app/controllers/food_products_controller.rb @@ -1,5 +1,5 @@ class FoodProductsController < ApplicationController - before_action :set_food_product, only: [:show, :update, :destroy] + before_action :set_food_product, only: %i[show update destroy] # GET /food_products # GET /food_products.json @@ -25,28 +25,29 @@ def create # PATCH/PUT /food_products/1.json def update @food_product.update(food_product_params) - render json: fmt(created, @food_product, "Updated food_product id = "+params[:id]) + render json: fmt(created, @food_product, 'Updated food_product id = ' + params[:id]) end # DELETE /food_products/1 # DELETE /food_products/1.json def destroy @food_product.destroy - render json: fmt(ok, [], "Deleted food_product = "+params[:id]) + render json: fmt(ok, [], 'Deleted food_product = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_food_product - if FoodProduct.exists?(params[:id]) - @food_product = FoodProduct.find(params[:id]) - else - render json: fmt(not_found, [], "Not found food_product = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def food_product_params - params.permit(:group_id, :name, :is_cooking, :first_day_num, :second_day_num) + # Use callbacks to share common setup or constraints between actions. + def set_food_product + if FoodProduct.exists?(params[:id]) + @food_product = FoodProduct.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found food_product = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def food_product_params + params.permit(:group_id, :name, :is_cooking, :first_day_num, :second_day_num) + end end diff --git a/api/app/controllers/group_categories_controller.rb b/api/app/controllers/group_categories_controller.rb index 568848c45..e4f8e4723 100644 --- a/api/app/controllers/group_categories_controller.rb +++ b/api/app/controllers/group_categories_controller.rb @@ -1,5 +1,5 @@ class GroupCategoriesController < ApplicationController - before_action :set_group_category, only: [:show, :update, :destroy] + before_action :set_group_category, only: %i[show update destroy] def index @group_categories = GroupCategory.all @@ -17,27 +17,27 @@ def create def update @group.update(group_category_params) - render json: fmt(created, @group_category, "Updated group_category id = "+params[:id]) + render json: fmt(created, @group_category, 'Updated group_category id = ' + params[:id]) end def destroy @group_category.destroy - render json: fmt(ok, [], "Deleted group_category = "+params[:id]) + render json: fmt(ok, [], 'Deleted group_category = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_group_category - if GroupCategory.exists?(params[:id]) - @group_category = GroupCategory.find(params[:id]) - else - render json: fmt(not_found, [], "Not found group_category = "+params[:id]) - end - end - - # Only allow a list of trusted parameters through. - def group_params - params.permit(:name) + # Use callbacks to share common setup or constraints between actions. + def set_group_category + if GroupCategory.exists?(params[:id]) + @group_category = GroupCategory.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found group_category = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def group_params + params.permit(:name) + end end diff --git a/api/app/controllers/group_identification_controller.rb b/api/app/controllers/group_identification_controller.rb index 3c7f9e48a..e40101616 100644 --- a/api/app/controllers/group_identification_controller.rb +++ b/api/app/controllers/group_identification_controller.rb @@ -1,21 +1,18 @@ class GroupIdentificationController < ApplicationController - before_action :set_group_identification, only: [:update, :destroy] + before_action :set_group_identification, only: %i[update destroy] def index # fes_year_idで絞り込み - if params[:fes_year_id] == "0" - @groups = Group.all - else - @groups = Group.where(fes_year_id: params[:fes_year_id]) - end + @groups = if params[:fes_year_id] == '0' + Group.all + else + Group.where(fes_year_id: params[:fes_year_id]) + end # カテゴリで絞り込み - if params[:group_category_id] != "0" - @groups = @groups.where(group_category_id: params[:group_category_id]) - end + @groups = @groups.where(group_category_id: params[:group_category_id]) if params[:group_category_id] != '0' - @group_identifications = @groups.map{ - |group| + @group_identifications = @groups.map do |group| { "id": group.group_identification.nil? ? nil : group.group_identification.id, "group_id": group.id, @@ -27,9 +24,9 @@ def index "stage": group.stage.nil? ? nil : group.stage, "created_at": group.group_identification.nil? ? nil : group.group_identification.created_at, "updated_at": group.group_identification.nil? ? nil : group.group_identification.updated_at - + } - } + end render json: fmt(ok, @group_identifications) end @@ -40,12 +37,12 @@ def create def update @group_identification.update(group_identification_params) - render json: fmt(ok, @group_identification, "Updated group_identification id = "+params[:id]) + render json: fmt(ok, @group_identification, 'Updated group_identification id = ' + params[:id]) end def destroy @group_identification.destroy - render json: fmt(ok, [], "Deleted group_identification id = "+params[:id]) + render json: fmt(ok, [], 'Deleted group_identification id = ' + params[:id]) end private @@ -54,12 +51,11 @@ def set_group_identification if GroupIdentification.exists?(params[:id]) @group_identification = GroupIdentification.find(params[:id]) else - render json: fmt(not_found, [], "Not found group_identification = "+params[:id]) + render json: fmt(not_found, [], 'Not found group_identification = ' + params[:id]) end end def group_identification_params params.permit(:group_id, :number) end - end diff --git a/api/app/controllers/groups_controller.rb b/api/app/controllers/groups_controller.rb index 7ccc3ba08..2bebab87a 100644 --- a/api/app/controllers/groups_controller.rb +++ b/api/app/controllers/groups_controller.rb @@ -1,5 +1,5 @@ class GroupsController < ApplicationController - before_action :set_group, only: [:show, :update, :destroy] + before_action :set_group, only: %i[show update destroy] # GET /groups # GET /groups.json @@ -45,7 +45,7 @@ def create # PATCH/PUT /groups/1.json def update @group.update(group_params) - render json: fmt(created, @group, "Updated group id = "+params[:id]) + render json: fmt(created, @group, 'Updated group id = ' + params[:id]) client = Slack::Web::Client.new client.chat_postMessage( @@ -72,7 +72,7 @@ def update # DELETE /groups/1.json def destroy @group.destroy - render json: fmt(ok, [], "Deleted group id = "+params[:id]) + render json: fmt(ok, [], 'Deleted group id = ' + params[:id]) client = Slack::Web::Client.new client.chat_postMessage( @@ -96,19 +96,21 @@ def destroy end private - # Use callbacks to share common setup or constraints between actions. - def set_group - # groupのIDのgroupが存在するかを確認 - if Group.exists?(params[:id]) - @group = Group.find(params[:id]) - else - # なければnot found - render json: fmt(not_found, [], "Not found group id = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def group_params - params.permit(:name, :project_name, :activity, :user_id, :group_category_id, :fes_year_id, :committee, :is_international, :is_external) + # Use callbacks to share common setup or constraints between actions. + def set_group + # groupのIDのgroupが存在するかを確認 + if Group.exists?(params[:id]) + @group = Group.find(params[:id]) + else + # なければnot found + render json: fmt(not_found, [], 'Not found group id = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def group_params + params.permit(:name, :project_name, :activity, :user_id, :group_category_id, :fes_year_id, :committee, + :is_international, :is_external) + end end diff --git a/api/app/controllers/memos_controller.rb b/api/app/controllers/memos_controller.rb index eb856ecb5..d0f4d8dde 100644 --- a/api/app/controllers/memos_controller.rb +++ b/api/app/controllers/memos_controller.rb @@ -1,17 +1,16 @@ class MemosController < ApplicationController - before_action :set_memo, only: [:show, :update, :destroy] + before_action :set_memo, only: %i[show update destroy] # GET /memos # GET /memos.json def index - @memos = Memo.preload(:user).order(id: "DESC").limit(100) - .map{ - |memo| - { - "memo": memo, - "user": memo.user - } + @memos = Memo.preload(:user).order(id: 'DESC').limit(100) + .map do |memo| + { + "memo": memo, + "user": memo.user } + end render json: fmt(ok, @memos) end @@ -37,7 +36,7 @@ def create # PATCH/PUT /memos/1.json def update @memo.update(memo_params) - @memos = Memo.all.order(id: "DESC") + @memos = Memo.all.order(id: 'DESC') memo_list = [] for memo in @memos user = memo.user.name @@ -54,21 +53,22 @@ def update # DELETE /memos/1.json def destroy @memo.destroy - render json: fmt(ok, [], "Deleted memo = "+params[:id]) + render json: fmt(ok, [], 'Deleted memo = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_memo - if Memo.exists?(params[:id]) - @memo = Memo.find(params[:id]) - else - render json: fmt(not_found, [], "Not found memo = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def memo_params - params.permit(:content, :user_id) + # Use callbacks to share common setup or constraints between actions. + def set_memo + if Memo.exists?(params[:id]) + @memo = Memo.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found memo = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def memo_params + params.permit(:content, :user_id) + end end diff --git a/api/app/controllers/news_controller.rb b/api/app/controllers/news_controller.rb index 3f2e126ac..76e4989dd 100644 --- a/api/app/controllers/news_controller.rb +++ b/api/app/controllers/news_controller.rb @@ -1,10 +1,10 @@ class NewsController < ApplicationController - before_action :set_news, only: [:show, :update, :destroy] + before_action :set_news, only: %i[show update destroy] # GET /news # GET /news.json def index - @news = News.all.order(id: "DESC") + @news = News.all.order(id: 'DESC') render json: @news end @@ -25,28 +25,29 @@ def create # PATCH/PUT /news/1.json def update @news.update(news_params) - render json: fmt(created, @news, "Updated news id = "+params[:id]) + render json: fmt(created, @news, 'Updated news id = ' + params[:id]) end # DELETE /news/1 # DELETE /news/1.json def destroy @news.destroy - render json: fmt(ok, [], "Deleted news = "+params[:id]) + render json: fmt(ok, [], 'Deleted news = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_news - if News.exists?(params[:id]) - @news = News.find(params[:id]) - else - render json: fmt(not_found, [], "Not found news = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def news_params - params.permit(:title, :body) + # Use callbacks to share common setup or constraints between actions. + def set_news + if News.exists?(params[:id]) + @news = News.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found news = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def news_params + params.permit(:title, :body) + end end diff --git a/api/app/controllers/place_allow_lists_controller.rb b/api/app/controllers/place_allow_lists_controller.rb index 4cfcb5371..3349198ee 100644 --- a/api/app/controllers/place_allow_lists_controller.rb +++ b/api/app/controllers/place_allow_lists_controller.rb @@ -1,5 +1,5 @@ class PlaceAllowListsController < ApplicationController - before_action :set_place_allow_list, only: [:show, :update, :destroy] + before_action :set_place_allow_list, only: %i[show update destroy] # GET /place_allow_lists # GET /place_allow_lists.json @@ -25,28 +25,29 @@ def create # PATCH/PUT /place_allow_lists/1.json def update @place_allow_list.update(place_allow_list_params) - render json: fmt(created, @place_allow_list, "Updated place_allow_list id = "+params[:id]) + render json: fmt(created, @place_allow_list, 'Updated place_allow_list id = ' + params[:id]) end # DELETE /place_allow_lists/1 # DELETE /place_allow_lists/1.json def destroy @place_allow_list.destroy - render json: fmt(ok, [], "Deleted place_allow_list = "+params[:id]) + render json: fmt(ok, [], 'Deleted place_allow_list = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_place_allow_list - if PlaceAllowList.exists?(params[:id]) - @place_allow_list = PlaceAllowList.find(params[:id]) - else - render json: fmt(not_found, [], "Not found place_allow_list = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def place_allow_list_params - params.permit(:place_id, :group_category_id, :enable) + # Use callbacks to share common setup or constraints between actions. + def set_place_allow_list + if PlaceAllowList.exists?(params[:id]) + @place_allow_list = PlaceAllowList.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found place_allow_list = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def place_allow_list_params + params.permit(:place_id, :group_category_id, :enable) + end end diff --git a/api/app/controllers/place_number_controller.rb b/api/app/controllers/place_number_controller.rb index 12bf2d068..b75e6d0a5 100644 --- a/api/app/controllers/place_number_controller.rb +++ b/api/app/controllers/place_number_controller.rb @@ -1,25 +1,27 @@ class PlaceNumberController < ApplicationController - before_action :set_place_number, only: [:show, :update, :destroy] + before_action :set_place_number, only: %i[show update destroy] # 会場割り当て def index @places = Place.all - @place_numbers = @places.map{ - |place| + @place_numbers = @places.map do |place| { "place": place, - "place_numbers": place.place_numbers.nil? ? nil : place.place_numbers.map{ - |place_number| - { - "group_identification_id": place_number.group_identification.nil? ? nil : place_number.group_identification.id, - "place_number": place_number.nil? ? nil : place_number, - "num": place_number.group_identification.nil? ? nil : place_number.group_identification.number, - "group": place_number.group_identification.nil? ? nil : place_number.group_identification.group - } - } + "place_numbers": if place.place_numbers.nil? + nil + else + place.place_numbers.map do |place_number| + { + "group_identification_id": place_number.group_identification.nil? ? nil : place_number.group_identification.id, + "place_number": place_number.nil? ? nil : place_number, + "num": place_number.group_identification.nil? ? nil : place_number.group_identification.number, + "group": place_number.group_identification.nil? ? nil : place_number.group_identification.group + } + end + end } - } + end render json: fmt(ok, @place_numbers) end @@ -30,12 +32,12 @@ def create def update @place_number.update(place_number_params) - render json: fmt(ok, @place_number, "Updated place_number id ="+params[:id]) + render json: fmt(ok, @place_number, 'Updated place_number id =' + params[:id]) end def destroy @place_number.destroy - render json: fmt(ok, [], "Deleted place_number id ="+params[:id]) + render json: fmt(ok, [], 'Deleted place_number id =' + params[:id]) end private @@ -44,11 +46,11 @@ def set_place_number if PlaceNumber.exists?(params[:id]) @place_number = PlaceNumber.find(params[:id]) else - render json: fmt(not_found, [], "Not found place_number id = "+params[:id]) + render json: fmt(not_found, [], 'Not found place_number id = ' + params[:id]) end end def place_number_params params.permit(:place_id, :group_identification_id) end -end \ No newline at end of file +end diff --git a/api/app/controllers/place_orders_controller.rb b/api/app/controllers/place_orders_controller.rb index d0789a3a6..869496ce9 100644 --- a/api/app/controllers/place_orders_controller.rb +++ b/api/app/controllers/place_orders_controller.rb @@ -1,5 +1,5 @@ class PlaceOrdersController < ApplicationController - before_action :set_place_order, only: [:show, :update, :destroy] + before_action :set_place_order, only: %i[show update destroy] # GET /place_orders # GET /place_orders.json @@ -25,28 +25,29 @@ def create # PATCH/PUT /place_orders/1.json def update @place_order.update(place_order_params) - render json: fmt(created, @place_order, "Updated place_order id = "+params[:id]) + render json: fmt(created, @place_order, 'Updated place_order id = ' + params[:id]) end # DELETE /place_orders/1 # DELETE /place_orders/1.json def destroy @place_order.destroy - render json:fmt(ok, [], "Deletd place_order = "+params[:id]) + render json: fmt(ok, [], 'Deletd place_order = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_place_order - if PlaceOrder.exists?(params[:id]) - @place_order = PlaceOrder.find(params[:id]) - else - render json: fmt(not_found, [], "Not found place_order = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def place_order_params - params.permit(:group_id, :first, :second, :third, :remark) + # Use callbacks to share common setup or constraints between actions. + def set_place_order + if PlaceOrder.exists?(params[:id]) + @place_order = PlaceOrder.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found place_order = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def place_order_params + params.permit(:group_id, :first, :second, :third, :remark) + end end diff --git a/api/app/controllers/places_controller.rb b/api/app/controllers/places_controller.rb index 123aea18c..0ab74339e 100644 --- a/api/app/controllers/places_controller.rb +++ b/api/app/controllers/places_controller.rb @@ -1,5 +1,5 @@ class PlacesController < ApplicationController - before_action :set_place, only: [:show, :update, :destroy] + before_action :set_place, only: %i[show update destroy] def index @places = Place.all @@ -17,28 +17,29 @@ def create def update @place.update(place_params) - render json: fmt(created, @place, "Updated place id = "+params[:id]) + render json: fmt(created, @place, 'Updated place id = ' + params[:id]) end # DELETE /place_orders/1 # DELETE /place_orders/1.json def destroy @place.destroy - render json: fmt(ok, [], "Deleted place = "+params[:id]) + render json: fmt(ok, [], 'Deleted place = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_place - if Place.exists?(params[:id]) - @place = Place.find(params[:id]) - else - render json: fmt(not_found, [], "Not found place = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def place_params - params.permit(:name) + # Use callbacks to share common setup or constraints between actions. + def set_place + if Place.exists?(params[:id]) + @place = Place.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found place = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def place_params + params.permit(:name) + end end diff --git a/api/app/controllers/power_orders_controller.rb b/api/app/controllers/power_orders_controller.rb index bda1555b4..4a6ae7e11 100644 --- a/api/app/controllers/power_orders_controller.rb +++ b/api/app/controllers/power_orders_controller.rb @@ -1,5 +1,5 @@ class PowerOrdersController < ApplicationController - before_action :set_power_order, only: [:show, :update, :destroy] + before_action :set_power_order, only: %i[show update destroy] # GET /power_orders # GET /power_orders.json @@ -25,28 +25,29 @@ def create # PATCH/PUT /power_orders/1.json def update @power_order.update(power_order_params) - render json: fmt(created, @power_order, "Updated power_order id = "+params[:id]) + render json: fmt(created, @power_order, 'Updated power_order id = ' + params[:id]) end # DELETE /power_orders/1 # DELETE /power_orders/1.json def destroy @power_order.destroy - render json: fmt(ok, [], "Deleted power_order = "+params[:id]) + render json: fmt(ok, [], 'Deleted power_order = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_power_order - if PowerOrder.exists?(params[:id]) - @power_order = PowerOrder.find(params[:id]) - else - render json: fmt(not_found, [], "Not found power_order = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def power_order_params - params.permit(:group_id, :item, :power, :manufacturer, :model, :item_url) + # Use callbacks to share common setup or constraints between actions. + def set_power_order + if PowerOrder.exists?(params[:id]) + @power_order = PowerOrder.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found power_order = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def power_order_params + params.permit(:group_id, :item, :power, :manufacturer, :model, :item_url) + end end diff --git a/api/app/controllers/print_pdf_controller.rb b/api/app/controllers/print_pdf_controller.rb index 89fb35ee2..37eb8fd27 100644 --- a/api/app/controllers/print_pdf_controller.rb +++ b/api/app/controllers/print_pdf_controller.rb @@ -3,61 +3,62 @@ class PrintPdfController < ApplicationController # 物品貸し出し書類出力 def output_rental_items_pdf - output_groups("output_rental_items", "output_rental_items_pdf", "物品貸出表", "Not Landscape") + output_groups('output_rental_items', 'output_rental_items_pdf', '物品貸出表', 'Not Landscape') end # 物品貸し出し書類をまとめて出力 def output_all_groups_rental_items_pdf @groups = Group.where(fes_year_id: params[:fes_year_id]).order(:group_category_id) - print_pdf("output_all_groups_rental_items", "output_rental_items_pdf", "物品貸出表", "Not Landscape") + print_pdf('output_all_groups_rental_items', 'output_rental_items_pdf', '物品貸出表', 'Not Landscape') end # 参加団体情報リスト def output_group_info_pdf - output_groups("output_group_info", "output_group_info_pdf", "参加団体情報", "Not Landscape") + output_groups('output_group_info', 'output_group_info_pdf', '参加団体情報', 'Not Landscape') end # 参加団体情報リストをまとめて出力 def output_all_groups_info_pdf @groups = Group.where(fes_year_id: params[:fes_year_id]) - print_pdf("output_all_groups_info", "output_rental_items_pdf", "参加団体情報リストまとめ", "Not Landscape") + print_pdf('output_all_groups_info', 'output_rental_items_pdf', '参加団体情報リストまとめ', 'Not Landscape') end # 使用電力リスト出力 def output_powers_pdf - output_groups_with_categories("output_powers", "output_powers_pdf", "使用電力リスト", "Landscape") + output_groups_with_categories('output_powers', 'output_powers_pdf', '使用電力リスト', 'Landscape') end # 従業員リスト def output_employees_pdf - output_groups_in_group_category_1("output_employees", "output_employees_pdf", "従業員リスト", "Not Landscape") + output_groups_in_group_category_1('output_employees', 'output_employees_pdf', '従業員リスト', 'Not Landscape') end # 貸出物品リスト def output_rental_items_list_pdf - output_groups_with_categories("output_rental_items_list", "output_rental_items_list_pdf", "貸出物品リストまとめ", "Landscape") + output_groups_with_categories('output_rental_items_list', 'output_rental_items_list_pdf', '貸出物品リストまとめ', 'Landscape') end # 販売品リスト def output_food_products_pdf - output_groups_in_group_category_1("output_food_products", "output_food_products_pdf", "販売品リスト", "Landscape") + output_groups_in_group_category_1('output_food_products', 'output_food_products_pdf', '販売品リスト', 'Landscape') end # 連絡先リスト def output_contacts_pdf - output_groups_with_categories("output_contact", "output_contact_pdf", "連絡先リスト", "Not Landscape") + output_groups_with_categories('output_contact', 'output_contact_pdf', '連絡先リスト', 'Not Landscape') end # 保健所提出書類(調理計画・従事者)の出力 def output_health_office_documents_pdf - output_groups_of_health_office_document("output_health_office_documents", "output_health_office_documents_pdf", "保健所提出書類(調理計画・従事者)", "Not Landscape") + output_groups_of_health_office_document('output_health_office_documents', 'output_health_office_documents_pdf', + '保健所提出書類(調理計画・従事者)', 'Not Landscape') end # 全参加団体用 def output_groups(template_name, style_name, output_file_name, type) if Group.exists?(params[:group_id]) @group = Group.find(params[:group_id]) - print_pdf(template_name, style_name, "#{output_file_name}_#{format("%02d", @group.id)}.#{@group.name}", type) + print_pdf(template_name, style_name, "#{output_file_name}_#{format('%02d', @group.id)}.#{@group.name}", type) # groupが存在しなければNot FoundのHTMLを出力 else render file: "#{Rails.root}/app/views/print_pdf/not_found.html", layout: false, content_type: 'text/html' @@ -106,29 +107,25 @@ def print_pdf(template_name, style_name, output_file_name, type) respond_to do |format| format.pdf do html = render_to_string template: "print_pdf/#{template_name}" - if type == 'Landscape' - pdf = PDFKit.new(html, + pdf = if type == 'Landscape' + PDFKit.new(html, page_size: 'A4', - encoding: "UTF-8", + encoding: 'UTF-8', orientation: 'Landscape', margin_top: '0.2in', margin_left: '0.2in', margin_right: '0.2in', - margin_bottom: '0.2in' - ) - else - pdf = PDFKit.new(html, page_size: 'A4', encoding: "UTF-8") - end + margin_bottom: '0.2in') + else + PDFKit.new(html, page_size: 'A4', encoding: 'UTF-8') + end pdf.stylesheets << "#{Rails.root}/app/views/print_pdf/#{style_name}.css" send_data pdf.to_pdf, - filename: "#{output_file_name}.pdf", - # disposition: "inline", # ダウンロードせず表示する - type: "application/pdf" - + filename: "#{output_file_name}.pdf", + # disposition: "inline", # ダウンロードせず表示する + type: 'application/pdf' end end end - end - diff --git a/api/app/controllers/public_relations_controller.rb b/api/app/controllers/public_relations_controller.rb index 6e7737716..96f274370 100644 --- a/api/app/controllers/public_relations_controller.rb +++ b/api/app/controllers/public_relations_controller.rb @@ -1,5 +1,5 @@ class PublicRelationsController < ApplicationController - before_action :set_public_relation, only: %i[ show update destroy ] + before_action :set_public_relation, only: %i[show update destroy] def index @public_relations = PublicRelation.all @@ -17,26 +17,27 @@ def create def update @public_relation.update(public_relation_params) - render json: fmt(created, @public_relation, "Updated public_relation id = "+params[:id]) + render json: fmt(created, @public_relation, 'Updated public_relation id = ' + params[:id]) end def destroy @public_relation.destroy - render json: fmt(ok, [], "Deleted public_relation = "+params[:id]) + render json: fmt(ok, [], 'Deleted public_relation = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_public_relation - if PublicRelation.exists?(params[:id]) - @public_relation = PublicRelation.find(params[:id]) - else - render json: fmt(not_found, [], "Not found public_relation = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def public_relation_params - params.permit(:group_id, :picture_name, :picture_path, :blurb) + # Use callbacks to share common setup or constraints between actions. + def set_public_relation + if PublicRelation.exists?(params[:id]) + @public_relation = PublicRelation.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found public_relation = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def public_relation_params + params.permit(:group_id, :picture_name, :picture_path, :blurb) + end end diff --git a/api/app/controllers/purchase_lists_controller.rb b/api/app/controllers/purchase_lists_controller.rb index c98cc8122..38b090a67 100644 --- a/api/app/controllers/purchase_lists_controller.rb +++ b/api/app/controllers/purchase_lists_controller.rb @@ -1,5 +1,5 @@ class PurchaseListsController < ApplicationController - before_action :set_purchase_list, only: [:show, :update, :destroy] + before_action :set_purchase_list, only: %i[show update destroy] # GET /purchase_lists # GET /purchase_lists.json @@ -25,27 +25,29 @@ def create # PATCH/PUT /purchase_lists/1.json def update @purchase_list.update(purchase_list_params) - render json: fmt(created, @purchase_list, "Updated purchase_list id = "+params[:id]) + render json: fmt(created, @purchase_list, 'Updated purchase_list id = ' + params[:id]) end # DELETE /purchase_lists/1 # DELETE /purchase_lists/1.json def destroy @purchase_list.destroy - render json: fmt(ok, [], "Deleted purchase_list = "+params[:id]) + render json: fmt(ok, [], 'Deleted purchase_list = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_purchase_list - if PurchaseList.exists?(params[:id]) - @purchase_list = PurchaseList.find(params[:id]) - else - render json: fmt(not_found, [], "Not found purhase_list = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def purchase_list_params - params.permit(:food_product_id, :shop_id, :fes_date_id, :items, :is_fresh, :purchase_date, :url) + + # Use callbacks to share common setup or constraints between actions. + def set_purchase_list + if PurchaseList.exists?(params[:id]) + @purchase_list = PurchaseList.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found purhase_list = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def purchase_list_params + params.permit(:food_product_id, :shop_id, :fes_date_id, :items, :is_fresh, :purchase_date, :url) + end end diff --git a/api/app/controllers/rentable_items_controller.rb b/api/app/controllers/rentable_items_controller.rb index 3923ec61a..f33f817a0 100644 --- a/api/app/controllers/rentable_items_controller.rb +++ b/api/app/controllers/rentable_items_controller.rb @@ -1,5 +1,5 @@ class RentableItemsController < ApplicationController - before_action :set_rentable_item, only: [:show, :update, :destroy] + before_action :set_rentable_item, only: %i[show update destroy] # GET /rentable_items # GET /rentable_items.json @@ -25,28 +25,29 @@ def create # PATCH/PUT /rentable_items/1.json def update @rentable_item.update(rentable_item_params) - render json: fmt(created, @rentable_item, "Updated rentable_item id = "+params[:id]) + render json: fmt(created, @rentable_item, 'Updated rentable_item id = ' + params[:id]) end # DELETE /rentable_items/1 # DELETE /rentable_items/1.json def destroy @rentable_item.destroy - render json: fmt(ok, [], "Deleted rentable_item = "+params[:id]) + render json: fmt(ok, [], 'Deleted rentable_item = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_rentable_item - if RentableItem.exists?(params[:id]) - @rentable_item = RentableItem.find(params[:id]) - else - render json: fmt(not_found, [], "Not found rentable_item = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def rentable_item_params - params.permit(:stocker_item_id, :stocker_place_id, :max_num) + # Use callbacks to share common setup or constraints between actions. + def set_rentable_item + if RentableItem.exists?(params[:id]) + @rentable_item = RentableItem.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found rentable_item = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def rentable_item_params + params.permit(:stocker_item_id, :stocker_place_id, :max_num) + end end diff --git a/api/app/controllers/rental_item_allow_lists_controller.rb b/api/app/controllers/rental_item_allow_lists_controller.rb index 4353e03d8..25e123899 100644 --- a/api/app/controllers/rental_item_allow_lists_controller.rb +++ b/api/app/controllers/rental_item_allow_lists_controller.rb @@ -1,5 +1,5 @@ class RentalItemAllowListsController < ApplicationController - before_action :set_rental_item_allow_list, only: [:show, :update, :destroy] + before_action :set_rental_item_allow_list, only: %i[show update destroy] def index @rental_item_allow_lists = RentalItemAllowList.all @@ -17,26 +17,27 @@ def create def update @rental_item_allow_list.update(rental_item_allow_list_params) - render json: fmt(created, @rental_item_allow_list, "Updated rental_item_allow_list id = "+params[:id]) + render json: fmt(created, @rental_item_allow_list, 'Updated rental_item_allow_list id = ' + params[:id]) end def destroy @rental_item_allow_list.destroy - render json: fmt(ok, [], "Deleted rental_item_allow_list = "+params[:id]) + render json: fmt(ok, [], 'Deleted rental_item_allow_list = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_rental_item_allow_list - if RentalItemAllowList.exists?(params[:id]) - @rental_item_allow_list = RentalItemAllowList.find(params[:id]) - else - render json: fmt(not_found, [], "Not found rental_item_allow_list = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def rental_item_allow_list_params - params.permit(:rental_item_id, :group_category_id) + # Use callbacks to share common setup or constraints between actions. + def set_rental_item_allow_list + if RentalItemAllowList.exists?(params[:id]) + @rental_item_allow_list = RentalItemAllowList.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found rental_item_allow_list = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def rental_item_allow_list_params + params.permit(:rental_item_id, :group_category_id) + end end diff --git a/api/app/controllers/rental_items_controller.rb b/api/app/controllers/rental_items_controller.rb index 9503359dc..b5856b754 100644 --- a/api/app/controllers/rental_items_controller.rb +++ b/api/app/controllers/rental_items_controller.rb @@ -1,5 +1,5 @@ class RentalItemsController < ApplicationController - before_action :set_rental_item, only: [:show, :update, :destroy] + before_action :set_rental_item, only: %i[show update destroy] def index @rental_items = RentalItem.all @@ -17,26 +17,27 @@ def create def update @rental_item.update(rental_item_params) - render json: fmt(created, @rental_item, "Updated rental_item id = "+params[:id]) + render json: fmt(created, @rental_item, 'Updated rental_item id = ' + params[:id]) end def destroy @rental_item.destroy - render json: fmt(ok, [], "Deleted rental_item = "+params[:id]) + render json: fmt(ok, [], 'Deleted rental_item = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_rental_item - if RentalItem.exists?(params[:id]) - @rental_item = RentalItem.find(params[:id]) - else - render json: fmt(not_found, [], "Not found rental_item = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def rental_item_params - params.permit(:name, :is_inside_shop_rentable, :is_outside_shop_rentable, :is_stage_rentable) + # Use callbacks to share common setup or constraints between actions. + def set_rental_item + if RentalItem.exists?(params[:id]) + @rental_item = RentalItem.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found rental_item = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def rental_item_params + params.permit(:name, :is_inside_shop_rentable, :is_outside_shop_rentable, :is_stage_rentable) + end end diff --git a/api/app/controllers/rental_orders_controller.rb b/api/app/controllers/rental_orders_controller.rb index de3c80371..f86549ebc 100644 --- a/api/app/controllers/rental_orders_controller.rb +++ b/api/app/controllers/rental_orders_controller.rb @@ -1,5 +1,5 @@ class RentalOrdersController < ApplicationController - before_action :set_rental_order, only: [:show, :update, :destroy] + before_action :set_rental_order, only: %i[show update destroy] # GET /rental_orders # GET /rental_orders.json @@ -25,28 +25,29 @@ def create # PATCH/PUT /rental_orders/1.json def update @rental_order.update(rental_order_params) - render json: fmt(created, @rental_order, "Updated rental_order id = "+params[:id]) + render json: fmt(created, @rental_order, 'Updated rental_order id = ' + params[:id]) end # DELETE /rental_orders/1 # DELETE /rental_orders/1.json def destroy @rental_order.destroy - render json: fmt(ok, [], "Deleted rental_order = "+params[:id]) + render json: fmt(ok, [], 'Deleted rental_order = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_rental_order - if RentalOrder.exists?(params[:id]) - @rental_order = RentalOrder.find(params[:id]) - else - render json: fmt(not_found, [], "Not found rental_order = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def rental_order_params - params.permit(:group_id, :rental_item_id, :num) + # Use callbacks to share common setup or constraints between actions. + def set_rental_order + if RentalOrder.exists?(params[:id]) + @rental_order = RentalOrder.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found rental_order = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def rental_order_params + params.permit(:group_id, :rental_item_id, :num) + end end diff --git a/api/app/controllers/shops_controller.rb b/api/app/controllers/shops_controller.rb index 212f31bd2..7942a4cc8 100644 --- a/api/app/controllers/shops_controller.rb +++ b/api/app/controllers/shops_controller.rb @@ -1,5 +1,5 @@ class ShopsController < ApplicationController - before_action :set_shop, only: [:show, :update, :destroy] + before_action :set_shop, only: %i[show update destroy] def index @shops = Shop.all @@ -12,31 +12,32 @@ def show def create @shop = Shop.create(shop_params) - render json: fmt(created, @shop) + render json: fmt(created, @shop) end def update @shop.update(shop_params) - render json: fmt(created, @shop, "Updated shop id = "+params[:id]) + render json: fmt(created, @shop, 'Updated shop id = ' + params[:id]) end def destroy @shop.destroy - render json: fmt(ok, [], "Deleted shop = "+params[:id]) + render json: fmt(ok, [], 'Deleted shop = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_shop - if Shop.exists?(params[:id]) - @shop = Shop.find(params[:id]) - else - render json: fmt(not_found, [], "Not found shop = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def shop_params - params.permit(:name, :tel, :opening_hours, :address) + # Use callbacks to share common setup or constraints between actions. + def set_shop + if Shop.exists?(params[:id]) + @shop = Shop.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found shop = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def shop_params + params.permit(:name, :tel, :opening_hours, :address) + end end diff --git a/api/app/controllers/stage_common_options_controller.rb b/api/app/controllers/stage_common_options_controller.rb index 954fcf76b..45e4414ad 100644 --- a/api/app/controllers/stage_common_options_controller.rb +++ b/api/app/controllers/stage_common_options_controller.rb @@ -1,5 +1,5 @@ class StageCommonOptionsController < ApplicationController - before_action :set_stage_common_option, only: [:show, :update, :destroy] + before_action :set_stage_common_option, only: %i[show update destroy] # GET /stage_common_options # GET /stage_common_options.json @@ -25,28 +25,29 @@ def create # PATCH/PUT /stage_common_options/1.json def update @stage_common_option.update(stage_common_option_params) - render json: fmt(created, @stage_common_option, "Updated stage_common_option id = "+params[:id]) + render json: fmt(created, @stage_common_option, 'Updated stage_common_option id = ' + params[:id]) end # DELETE /stage_common_options/1 # DELETE /stage_common_options/1.json def destroy @stage_common_option.destroy - render json: fmt(ok, [], "Deleted stage_common_option = "+params[:id]) + render json: fmt(ok, [], 'Deleted stage_common_option = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_stage_common_option - if StageCommonOption.exists?(params[:id]) - @stage_common_option = StageCommonOption.find(params[:id]) - else - render json: fmt(not_found, [], "Not found stage_common_option = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def stage_common_option_params - params.permit(:group_id, :own_equipment, :bgm, :camera_permission, :loud_sound) + # Use callbacks to share common setup or constraints between actions. + def set_stage_common_option + if StageCommonOption.exists?(params[:id]) + @stage_common_option = StageCommonOption.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found stage_common_option = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def stage_common_option_params + params.permit(:group_id, :own_equipment, :bgm, :camera_permission, :loud_sound) + end end diff --git a/api/app/controllers/stage_number_controller.rb b/api/app/controllers/stage_number_controller.rb index 36d52a1d1..4e5514015 100644 --- a/api/app/controllers/stage_number_controller.rb +++ b/api/app/controllers/stage_number_controller.rb @@ -1,25 +1,35 @@ class StageNumberController < ApplicationController - before_action :set_stage_number, only: [:show, :update, :destroy] + before_action :set_stage_number, only: %i[show update destroy] # ステージ割り当て def index @stages = Stage.all - @stage_numbers = @stages.map{ - |stage| + @stage_numbers = @stages.map do |stage| { "stage": stage, - "stage_numbers": stage.stage_numbers.nil? ? nil : stage.stage_numbers.map{ - |stage_number| - { - "group_identification_id": stage_number.group_identification.nil? ? nil : stage_number.group_identification.id, - "stage_number": stage_number, - "num": stage_number.group_identification.nil? ? nil : (stage_number.group_identification.group.fes_year_id == params[:fes_year_id].to_i ? stage_number.group_identification.number : nil), - "group": stage_number.group_identification.nil? ? nil : (stage_number.group_identification.group.fes_year_id == params[:fes_year_id].to_i ? stage_number.group_identification.group : nil) - } - } + "stage_numbers": if stage.stage_numbers.nil? + nil + else + stage.stage_numbers.map do |stage_number| + { + "group_identification_id": stage_number.group_identification.nil? ? nil : stage_number.group_identification.id, + "stage_number": stage_number, + "num": if stage_number.group_identification.nil? + nil + else + (stage_number.group_identification.group.fes_year_id == params[:fes_year_id].to_i ? stage_number.group_identification.number : nil) + end, + "group": if stage_number.group_identification.nil? + nil + else + (stage_number.group_identification.group.fes_year_id == params[:fes_year_id].to_i ? stage_number.group_identification.group : nil) + end + } + end + end } - } + end render json: fmt(ok, @stage_numbers) end @@ -30,12 +40,12 @@ def create def update @stage_number.update(stage_number_params) - render json: fmt(ok, @stage_number, "Updated stage_number id ="+params[:id]) + render json: fmt(ok, @stage_number, 'Updated stage_number id =' + params[:id]) end def destroy @stage_number.destroy - render json: fmt(ok, [], "Deleted stage_number id ="+params[:id]) + render json: fmt(ok, [], 'Deleted stage_number id =' + params[:id]) end private @@ -44,7 +54,7 @@ def set_stage_number if StageNumber.exists?(params[:id]) @stage_number = StageNumber.find(params[:id]) else - render json: fmt(not_found, [], "Not found stage_number id = "+params[:id]) + render json: fmt(not_found, [], 'Not found stage_number id = ' + params[:id]) end end diff --git a/api/app/controllers/stage_orders_controller.rb b/api/app/controllers/stage_orders_controller.rb index 7ed8bcc23..e52f7062b 100644 --- a/api/app/controllers/stage_orders_controller.rb +++ b/api/app/controllers/stage_orders_controller.rb @@ -1,5 +1,5 @@ class StageOrdersController < ApplicationController - before_action :set_stage_order, only: [:show, :update, :destroy] + before_action :set_stage_order, only: %i[show update destroy] # GET /stage_orders # GET /stage_orders.json @@ -11,42 +11,44 @@ def index # GET /stage_orders/1 # GET /stage_orders/1.json def show - render json: fmt(ok, @stage_order) + render json: fmt(ok, @stage_order) end # POST /stage_orders # POST /stage_orders.json def create @stage_order = StageOrder.create(stage_order_params) - render json: fmt(created, @stage_order) + render json: fmt(created, @stage_order) end # PATCH/PUT /stage_orders/1 # PATCH/PUT /stage_orders/1.json def update @stage_order.update(stage_order_params) - render json: fmt(created, @stage_order, "Updated stage_order id = "+params[:id]) + render json: fmt(created, @stage_order, 'Updated stage_order id = ' + params[:id]) end # DELETE /stage_orders/1 # DELETE /stage_orders/1.json def destroy @stage_order.destroy - render json: fmt(ok, [], "Deleted stage_order = "+params[:id]) + render json: fmt(ok, [], 'Deleted stage_order = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_stage_order - if StageOrder.exists?(params[:id]) - @stage_order = StageOrder.find(params[:id]) - else - render json: fmt(not_found, [], "Not found stage_order = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def stage_order_params - params.permit(:group_id, :is_sunny, :fes_date_id, :stage_first, :stage_second, :use_time_interval, :prepare_time_interval, :cleanup_time_interval, :prepare_start_time, :performance_start_time, :performance_end_time, :cleanup_end_time) + # Use callbacks to share common setup or constraints between actions. + def set_stage_order + if StageOrder.exists?(params[:id]) + @stage_order = StageOrder.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found stage_order = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def stage_order_params + params.permit(:group_id, :is_sunny, :fes_date_id, :stage_first, :stage_second, :use_time_interval, + :prepare_time_interval, :cleanup_time_interval, :prepare_start_time, :performance_start_time, :performance_end_time, :cleanup_end_time) + end end diff --git a/api/app/controllers/stages_controller.rb b/api/app/controllers/stages_controller.rb index b5df7e3cf..109fd32ea 100644 --- a/api/app/controllers/stages_controller.rb +++ b/api/app/controllers/stages_controller.rb @@ -1,5 +1,5 @@ class StagesController < ApplicationController - before_action :set_stage, only: [:show, :update, :destroy] + before_action :set_stage, only: %i[show update destroy] def index @stages = Stage.all @@ -7,7 +7,7 @@ def index end def show - render json: fmt(ok, @stage) + render json: fmt(ok, @stage) end def show_sunny @@ -27,26 +27,27 @@ def create def update @stage.update(stage_params) - render json: fmt(created, @stage, "Updated stage id = "+params[:id]) + render json: fmt(created, @stage, 'Updated stage id = ' + params[:id]) end def destroy @stage.destroy - render json: fmt(ok, [], "Deleted stage = "+params[:id]) + render json: fmt(ok, [], 'Deleted stage = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_stage - if Stage.exists?(params[:id]) - @stage = Stage.find(params[:id]) - else - render json: fmt(not_found, [], "Not found stage = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def stage_params - params.permit(:name, :enable_sunny, :enable_rainy) + # Use callbacks to share common setup or constraints between actions. + def set_stage + if Stage.exists?(params[:id]) + @stage = Stage.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found stage = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def stage_params + params.permit(:name, :enable_sunny, :enable_rainy) + end end diff --git a/api/app/controllers/stocker_items_controller.rb b/api/app/controllers/stocker_items_controller.rb index 271dac25d..90962bfa7 100644 --- a/api/app/controllers/stocker_items_controller.rb +++ b/api/app/controllers/stocker_items_controller.rb @@ -1,5 +1,5 @@ class StockerItemsController < ApplicationController - before_action :set_stocker_item, only: [:show, :update, :destroy] + before_action :set_stocker_item, only: %i[show update destroy] # GET /stocker_items # GET /stocker_items.json @@ -27,28 +27,29 @@ def create # PATCH/PUT /stocker_items/1.json def update @stocker_item.update(stocker_item_params) - render json: fmt(created, @stocker_item, "Updated stocker_item id = "+params[:id]) + render json: fmt(created, @stocker_item, 'Updated stocker_item id = ' + params[:id]) end # DELETE /stocker_items/1 # DELETE /stocker_items/1.json def destroy @stocker_item.destroy - render json: fmt(ok, [], "Deleted stocker_item = "+params[:id]) + render json: fmt(ok, [], 'Deleted stocker_item = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_stocker_item - if StockerItem.exists?(params[:id]) - @stocker_item = StockerItem.find(params[:id]) - else - render json: fmt(not_found, [], "Not found stocker_item = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def stocker_item_params - params.permit(:rental_item_id, :stocker_place_id, :fes_year_id, :num) + # Use callbacks to share common setup or constraints between actions. + def set_stocker_item + if StockerItem.exists?(params[:id]) + @stocker_item = StockerItem.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found stocker_item = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def stocker_item_params + params.permit(:rental_item_id, :stocker_place_id, :fes_year_id, :num) + end end diff --git a/api/app/controllers/stocker_places_controller.rb b/api/app/controllers/stocker_places_controller.rb index c680e6099..d9557638b 100644 --- a/api/app/controllers/stocker_places_controller.rb +++ b/api/app/controllers/stocker_places_controller.rb @@ -1,5 +1,5 @@ class StockerPlacesController < ApplicationController - before_action :set_stocker_place, only: [:show, :update, :destroy] + before_action :set_stocker_place, only: %i[show update destroy] def index @stocker_places = StockerPlace.all @@ -17,26 +17,27 @@ def create def update @stocker_place.update(stocker_place_params) - render json: fmt(created, @stocker_place, "Updated stocker_place id = "+params[:id]) + render json: fmt(created, @stocker_place, 'Updated stocker_place id = ' + params[:id]) end def destroy @stocker_place.destroy - render json: fmt(ok, [], "Deleted stocker_place = "+params[:id]) + render json: fmt(ok, [], 'Deleted stocker_place = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_stocker_place - if StockerPlace.exists?(params[:id]) - @stocker_place = StockerPlace.find(params[:id]) - else - render json: fmt(not_found, [], "Not found stocker_place = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def stocker_place_params - params.permit(:name, :stock_item_status, :assign_item_status) + # Use callbacks to share common setup or constraints between actions. + def set_stocker_place + if StockerPlace.exists?(params[:id]) + @stocker_place = StockerPlace.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found stocker_place = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def stocker_place_params + params.permit(:name, :stock_item_status, :assign_item_status) + end end diff --git a/api/app/controllers/sub_reps_controller.rb b/api/app/controllers/sub_reps_controller.rb index 9f1f1b438..fc162df88 100644 --- a/api/app/controllers/sub_reps_controller.rb +++ b/api/app/controllers/sub_reps_controller.rb @@ -1,5 +1,5 @@ class SubRepsController < ApplicationController - before_action :set_sub_rep, only: [:show, :update, :destroy] + before_action :set_sub_rep, only: %i[show update destroy] # GET /sub_reps # GET /sub_reps.json @@ -25,28 +25,29 @@ def create # PATCH/PUT /sub_reps/1.json def update @sub_rep.update(sub_rep_params) - render json: fmt(created, @sub_rep, "Updated sub_rep id = "+params[:id]) + render json: fmt(created, @sub_rep, 'Updated sub_rep id = ' + params[:id]) end # DELETE /sub_reps/1 # DELETE /sub_reps/1.json def destroy @sub_rep.destroy - render json: fmt(ok, [], "Deleted sub_rep = "+params[:id]) + render json: fmt(ok, [], 'Deleted sub_rep = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_sub_rep - if SubRep.exists?(params[:id]) - @sub_rep = SubRep.find(params[:id]) - else - render json: fmt(not_found, [], "Not found sub_rep = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def sub_rep_params - params.permit(:group_id, :name, :department_id, :grade_id, :tel, :email, :student_id) + # Use callbacks to share common setup or constraints between actions. + def set_sub_rep + if SubRep.exists?(params[:id]) + @sub_rep = SubRep.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found sub_rep = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def sub_rep_params + params.permit(:group_id, :name, :department_id, :grade_id, :tel, :email, :student_id) + end end diff --git a/api/app/controllers/user_details_controller.rb b/api/app/controllers/user_details_controller.rb index 671c90fdf..070f750cd 100644 --- a/api/app/controllers/user_details_controller.rb +++ b/api/app/controllers/user_details_controller.rb @@ -1,14 +1,14 @@ class UserDetailsController < ApplicationController - before_action :set_user_detail, only: [:show, :update, :destroy] + before_action :set_user_detail, only: %i[show update destroy] # GET /user_details # GET /user_details.json def index - if params[:user_id] - @user_details = UserDetail.find_by(user_id: params[:user_id].to_i) - else - @user_details = UserDetail.all - end + @user_details = if params[:user_id] + UserDetail.find_by(user_id: params[:user_id].to_i) + else + UserDetail.all + end render json: fmt(ok, @user_details) end @@ -30,28 +30,29 @@ def create # PATCH/PUT /user_details/1.json def update @user_detail.update(user_detail_params) - render json: fmt(created, @user_detail, "Updated user_detail id = "+params[:id]) + render json: fmt(created, @user_detail, 'Updated user_detail id = ' + params[:id]) end # DELETE /user_details/1 # DELETE /user_details/1.json def destroy @user_detail.destroy - render json: fmt(ok, [], "Deleted user_detail = "+params[:id]) + render json: fmt(ok, [], 'Deleted user_detail = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_user_detail - if UserDetail.exists?(params[:id]) - @user_detail = UserDetail.find(params[:id]) - else - render json: fmt(not_found, [], "Not found user_detail = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def user_detail_params - params.permit(:tel, :grade_id, :department_id, :user_id, :student_id) + # Use callbacks to share common setup or constraints between actions. + def set_user_detail + if UserDetail.exists?(params[:id]) + @user_detail = UserDetail.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found user_detail = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def user_detail_params + params.permit(:tel, :grade_id, :department_id, :user_id, :student_id) + end end diff --git a/api/app/controllers/user_page_settings_controller.rb b/api/app/controllers/user_page_settings_controller.rb index 2fe0f5b09..79f8c7772 100644 --- a/api/app/controllers/user_page_settings_controller.rb +++ b/api/app/controllers/user_page_settings_controller.rb @@ -1,5 +1,5 @@ class UserPageSettingsController < ApplicationController - before_action :set_user_page_setting, only: [:show, :update, :destroy] + before_action :set_user_page_setting, only: %i[show update destroy] # GET /user_page_settings # GET /user_page_settings.json @@ -25,28 +25,30 @@ def create # PATCH/PUT /user_page_settings/1.json def update @user_page_setting.update(user_page_setting_params) - render json: fmt(created, @user_page_setting, "Updated user_page_setting id = "+params[:id]) + render json: fmt(created, @user_page_setting, 'Updated user_page_setting id = ' + params[:id]) end # DELETE /user_page_settings/1 # DELETE /user_page_settings/1.json def destroy @user_page_setting.destroy - render json: fmt(ok, [], "Deleted user_page_setting = "+params[:id]) + render json: fmt(ok, [], 'Deleted user_page_setting = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_user_page_setting - if UserPageSetting.exists?(params[:id]) - @user_page_setting = UserPageSetting.find(params[:id]) - else - render json: fmt(not_found, [], "Not found user_page_setting = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def user_page_setting_params - params.permit(:is_regist_group, :is_regist_food_product, :is_edit_group, :is_edit_sub_rep, :is_edit_place, :is_edit_power_order, :is_edit_rental_order, :is_edit_stage_order, :is_edit_employee, :is_edit_food_product, :is_edit_purchase_list,:add_power_order,:add_rental_order,:add_employee,:add_food_product,:add_purchase_list, :fes_year_id, :is_edit_announcement, :add_announcement, :is_edit_user, :is_edit_stage_common_option, :is_edit_public_relation, :is_edit_venue_map, :is_edit_cooking_process, :add_stage_order) + # Use callbacks to share common setup or constraints between actions. + def set_user_page_setting + if UserPageSetting.exists?(params[:id]) + @user_page_setting = UserPageSetting.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found user_page_setting = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def user_page_setting_params + params.permit(:is_regist_group, :is_regist_food_product, :is_edit_group, :is_edit_sub_rep, :is_edit_place, + :is_edit_power_order, :is_edit_rental_order, :is_edit_stage_order, :is_edit_employee, :is_edit_food_product, :is_edit_purchase_list, :add_power_order, :add_rental_order, :add_employee, :add_food_product, :add_purchase_list, :fes_year_id, :is_edit_announcement, :add_announcement, :is_edit_user, :is_edit_stage_common_option, :is_edit_public_relation, :is_edit_venue_map, :is_edit_cooking_process, :add_stage_order) + end end diff --git a/api/app/controllers/users_controller.rb b/api/app/controllers/users_controller.rb index 68324b308..03f9249b3 100644 --- a/api/app/controllers/users_controller.rb +++ b/api/app/controllers/users_controller.rb @@ -1,12 +1,12 @@ class UsersController < ApplicationController # before_action :authenticate_api_user! - before_action :set_user, only: [:show, :update, :destroy] + before_action :set_user, only: %i[show update destroy] def index @users = User.all render json: fmt(ok, @users) end - + def show render json: fmt(ok, @user) end @@ -18,12 +18,12 @@ def get_current_user def update @user.update(user_params) - render json: fmt(ok, @user, "Updated user id = "+params[:id]) + render json: fmt(ok, @user, 'Updated user id = ' + params[:id]) end def destroy @user.destroy - render json: fmt(ok, [], "Deleted user = "+params[:id]) + render json: fmt(ok, [], 'Deleted user = ' + params[:id]) end def show_user_detail @@ -39,7 +39,7 @@ def show_user_detail user_provider = @user.provider user_name = @user.name email = @user.email - + @groups = @user.groups groups = [] for group in @groups @@ -64,7 +64,7 @@ def show_user_detail department: department, department_id: department_id, student_id: student_id, - tel: tel, + tel: tel } render json: fmt(ok, user_detail) @@ -83,8 +83,8 @@ def get_user_detail grade: @grade, department: @department, student_id: @student_id, - tel: @tel, - + tel: @tel + } render json: fmt(ok, user_detail) @@ -93,12 +93,12 @@ def get_user_detail def edit_user_info @user = User.find(edit_user_info_params[:user_id]) @user_detail = @user.user_detail - @user.name = edit_user_info_params[:name] - @user.email = edit_user_info_params[:email] - @user_detail.student_id = edit_user_info_params[:student_id] - @user_detail.grade_id = edit_user_info_params[:grade_id] - @user_detail.department_id = edit_user_info_params[:department_id] - @user_detail.tel = edit_user_info_params[:tel] + @user.name = edit_user_info_params[:name] + @user.email = edit_user_info_params[:email] + @user_detail.student_id = edit_user_info_params[:student_id] + @user_detail.grade_id = edit_user_info_params[:grade_id] + @user_detail.department_id = edit_user_info_params[:department_id] + @user_detail.tel = edit_user_info_params[:tel] @user.save! @user_detail.save! end @@ -108,37 +108,37 @@ def reset_password @user.password = reset_password_params[:password] @user.password_confirmation = reset_password_params[:password_confirmation] @user.save! - render json: fmt(ok, [], "Updated password user_id = "+params[:user_id]) + render json: fmt(ok, [], 'Updated password user_id = ' + params[:user_id]) end def simply_user_create @user = User.create(simply_user_create_params) - if @user.id == nil - render json: fmt(internal_server_error, [], "internal_server_error") - else + if @user.id.nil? + render json: fmt(internal_server_error, [], 'internal_server_error') + else render json: fmt(created, @user) end end private - def set_user - @user = User.find(params[:id]) - end + def set_user + @user = User.find(params[:id]) + end - def user_params - params.permit(:name, :email, :role_id) - end - - def edit_user_info_params - params.permit(:user_id, :name, :student_id, :grade_id, :department_id, :tel, :email) - end + def user_params + params.permit(:name, :email, :role_id) + end - def reset_password_params - params.permit(:user_id, :password, :password_confirmation) - end + def edit_user_info_params + params.permit(:user_id, :name, :student_id, :grade_id, :department_id, :tel, :email) + end - def simply_user_create_params - params.permit(:name, :email, :password, :password_confirmation, :role_id) - end + def reset_password_params + params.permit(:user_id, :password, :password_confirmation) + end + + def simply_user_create_params + params.permit(:name, :email, :password, :password_confirmation, :role_id) + end end diff --git a/api/app/controllers/venue_maps_controller.rb b/api/app/controllers/venue_maps_controller.rb index 4e7fd10fc..ccf6794bb 100644 --- a/api/app/controllers/venue_maps_controller.rb +++ b/api/app/controllers/venue_maps_controller.rb @@ -1,5 +1,5 @@ class VenueMapsController < ApplicationController - before_action :set_venue_map, only: [:show, :update, :destroy] + before_action :set_venue_map, only: %i[show update destroy] # GET /venue_maps # GET /venue_maps.json @@ -25,27 +25,29 @@ def create # PATCH/PUT /venue_maps/1.json def update @venue_map.update(venue_map_params) - render json: fmt(created, @venue_map, "Updated venue_map id = "+params[:id]) + render json: fmt(created, @venue_map, 'Updated venue_map id = ' + params[:id]) end # DELETE /venue_maps/1 # DELETE /venue_maps/1.json def destroy @venue_map.destroy - render json: fmt(ok, [], "Deleted venue_map = "+params[:id]) + render json: fmt(ok, [], 'Deleted venue_map = ' + params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_venue_map - if VenueMap.exists?(params[:id]) - @venue_map = VenueMap.find(params[:id]) - else - render json: fmt(not_found, [], "Not found venue_map = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def venue_map_params - params.permit(:group_id, :picture_name, :picture_path) + + # Use callbacks to share common setup or constraints between actions. + def set_venue_map + if VenueMap.exists?(params[:id]) + @venue_map = VenueMap.find(params[:id]) + else + render json: fmt(not_found, [], 'Not found venue_map = ' + params[:id]) end + end + + # Only allow a list of trusted parameters through. + def venue_map_params + params.permit(:group_id, :picture_name, :picture_path) + end end diff --git a/api/app/models/announcement.rb b/api/app/models/announcement.rb index 8c4892df6..7a3f06809 100644 --- a/api/app/models/announcement.rb +++ b/api/app/models/announcement.rb @@ -1,29 +1,28 @@ class Announcement < ApplicationRecord belongs_to :group -def self.with_groups - @record = Announcement.preload(:group) - .map{ - |announcement| + def self.with_groups + @record = Announcement.preload(:group) + .map do |announcement| { "announcement": announcement, "group": announcement.group } - } -end + end + end -def self.with_group(announcement_id) - announcement = Announcement.find(announcement_id) - { - "announcement": announcement, - "group": announcement.group - } -end + def self.with_group(announcement_id) + announcement = Announcement.find(announcement_id) + { + "announcement": announcement, + "group": announcement.group + } + end -def to_info_h - return { - "id": self.id, - "group_id": self.group_id, - } + def to_info_h + { + "id": id, + "group_id": group_id + } end end diff --git a/api/app/models/assign_group_place.rb b/api/app/models/assign_group_place.rb index ccc30cf78..9552d4d74 100644 --- a/api/app/models/assign_group_place.rb +++ b/api/app/models/assign_group_place.rb @@ -1,4 +1,4 @@ class AssignGroupPlace < ApplicationRecord - belongs_to :place_order - belongs_to :place + belongs_to :place_order + belongs_to :place end diff --git a/api/app/models/assign_rental_item.rb b/api/app/models/assign_rental_item.rb index 06b137692..e52a171d0 100644 --- a/api/app/models/assign_rental_item.rb +++ b/api/app/models/assign_rental_item.rb @@ -1,37 +1,36 @@ class AssignRentalItem < ApplicationRecord - belongs_to :group - belongs_to :rental_item - belongs_to :stocker_place + belongs_to :group + belongs_to :rental_item + belongs_to :stocker_place - def self.with_groups_and_rental_item - @record = AssignRentalItem.preload(:group) - .map{ - |assign_rental_item| - { - "assign_rental_item": assign_rental_item, - "rental_item": assign_rental_item.rental_item, - "group": assign_rental_item.group - } - } - end - - def self.with_rental_item(assign_rental_item_id) - assign_rental_item = AssignRentalItem.find(assign_rental_item_id) - return { - "assign_rental_item": assign_rental_item, - "rental_item": assign_rental_item.rental_item, - "group": assign_rental_item.group - } + def self.with_groups_and_rental_item + @record = AssignRentalItem.preload(:group) + .map do |assign_rental_item| + { + "assign_rental_item": assign_rental_item, + "rental_item": assign_rental_item.rental_item, + "group": assign_rental_item.group + } end + end - def to_rental_item_info_h - return { - "rental_item": self.nil? ? nil : self, - "name": self.rental_item.name, - "is_inside_shop_rentable": self.rental_item.is_inside_shop_rentable, - "is_outside_shop_rentable": self.rental_item.is_outside_shop_rentable, - "is_stage_rentable": self.rental_item.is_stage_rentable, - "num": self.num - } - end + def self.with_rental_item(assign_rental_item_id) + assign_rental_item = AssignRentalItem.find(assign_rental_item_id) + { + "assign_rental_item": assign_rental_item, + "rental_item": assign_rental_item.rental_item, + "group": assign_rental_item.group + } + end + + def to_rental_item_info_h + { + "rental_item": nil? ? nil : self, + "name": rental_item.name, + "is_inside_shop_rentable": rental_item.is_inside_shop_rentable, + "is_outside_shop_rentable": rental_item.is_outside_shop_rentable, + "is_stage_rentable": rental_item.is_stage_rentable, + "num": num + } + end end diff --git a/api/app/models/assign_stage.rb b/api/app/models/assign_stage.rb index 2415c6dd4..4ab8fd670 100644 --- a/api/app/models/assign_stage.rb +++ b/api/app/models/assign_stage.rb @@ -1,4 +1,4 @@ class AssignStage < ApplicationRecord - belongs_to :stage - belongs_to :stage_order + belongs_to :stage + belongs_to :stage_order end diff --git a/api/app/models/contact_person.rb b/api/app/models/contact_person.rb index 78e819884..5234ce400 100644 --- a/api/app/models/contact_person.rb +++ b/api/app/models/contact_person.rb @@ -1,3 +1,3 @@ class ContactPerson < ApplicationRecord - has_many :groups, dependent: :destroy + has_many :groups, dependent: :destroy end diff --git a/api/app/models/cooking_process_order.rb b/api/app/models/cooking_process_order.rb index 599227c32..3524b933e 100644 --- a/api/app/models/cooking_process_order.rb +++ b/api/app/models/cooking_process_order.rb @@ -5,12 +5,12 @@ class CookingProcessOrder < ApplicationRecord # 全ての CookingProcessOrder レコードとそれらの group をプリロードしてハッシュで返すクラスメソッド def self.with_groups @records = CookingProcessOrder.preload(:group) - .map { |cooking_process_order| - { - "cooking_process_order": cooking_process_order, - "group": cooking_process_order.group - } + .map do |cooking_process_order| + { + "cooking_process_order": cooking_process_order, + "group": cooking_process_order.group } + end end # 特定の CookingProcessOrder レコードとその group を返すクラスメソッド @@ -25,11 +25,11 @@ def self.with_group(cooking_process_order_id) # インスタンスの情報をハッシュとして返すインスタンスメソッド def to_info_h { - "id": self.id, - "group_id": self.group_id, - "pre_open_kitchen": self.pre_open_kitchen, - "during_open_kitchen": self.during_open_kitchen, - "tent": self.tent + "id": id, + "group_id": group_id, + "pre_open_kitchen": pre_open_kitchen, + "during_open_kitchen": during_open_kitchen, + "tent": tent } end end diff --git a/api/app/models/employee.rb b/api/app/models/employee.rb index 7ea015657..203e58c3b 100644 --- a/api/app/models/employee.rb +++ b/api/app/models/employee.rb @@ -4,19 +4,18 @@ class Employee < ApplicationRecord def self.with_groups @record = Employee.preload(:group) - .map{ - |employee| - { - "employee": employee, - "group": employee.group, - "stool_test": employee.stool_test - } + .map do |employee| + { + "employee": employee, + "group": employee.group, + "stool_test": employee.stool_test } + end end def self.with_group(employee_id) employee = Employee.find(employee_id) - return { + { "employee": employee, "group": employee.group, "stool_test": employee.stool_test @@ -24,11 +23,11 @@ def self.with_group(employee_id) end def to_info_h - return { - "id": self.id, - "name": self.name, - "student_id": self.student_id, - "stool_test": self.stool_test.status + { + "id": id, + "name": name, + "student_id": student_id, + "stool_test": stool_test.status } end end diff --git a/api/app/models/fes_date.rb b/api/app/models/fes_date.rb index 118cd5046..fa646d962 100644 --- a/api/app/models/fes_date.rb +++ b/api/app/models/fes_date.rb @@ -1,5 +1,5 @@ class FesDate < ApplicationRecord - belongs_to :fes_year - has_many :stage_orders - has_many :purchase_lists + belongs_to :fes_year + has_many :stage_orders + has_many :purchase_lists end diff --git a/api/app/models/fes_year.rb b/api/app/models/fes_year.rb index 72a66d37c..29dc900d8 100644 --- a/api/app/models/fes_year.rb +++ b/api/app/models/fes_year.rb @@ -1,6 +1,6 @@ class FesYear < ApplicationRecord - has_many :groups - has_many :fes_dates - has_many :stocker_items - has_one :user_page_settings + has_many :groups + has_many :fes_dates + has_many :stocker_items + has_one :user_page_settings end diff --git a/api/app/models/food_product.rb b/api/app/models/food_product.rb index 30e5554ee..29b65ffe9 100644 --- a/api/app/models/food_product.rb +++ b/api/app/models/food_product.rb @@ -1,33 +1,32 @@ class FoodProduct < ApplicationRecord - belongs_to :group - has_many :purchase_lists, dependent: :destroy + belongs_to :group + has_many :purchase_lists, dependent: :destroy - def self.with_groups - @record = FoodProduct.preload(:group) - .map{ - |food_product| - { - "food_product": food_product, - "group": food_product.group - } - } - end - - def self.with_group(food_product_id) - food_product = FoodProduct.find(food_product_id) + def self.with_groups + @record = FoodProduct.preload(:group) + .map do |food_product| { "food_product": food_product, "group": food_product.group } end + end - def to_info_h - return { - "id": self.id, - "name": self.name, - "is_cooking": self.is_cooking, - "first_day_num": self.first_day_num, - "second_day_num": self.second_day_num - } - end + def self.with_group(food_product_id) + food_product = FoodProduct.find(food_product_id) + { + "food_product": food_product, + "group": food_product.group + } + end + + def to_info_h + { + "id": id, + "name": name, + "is_cooking": is_cooking, + "first_day_num": first_day_num, + "second_day_num": second_day_num + } + end end diff --git a/api/app/models/group.rb b/api/app/models/group.rb index 0b1737ecc..1ee8c34ff 100644 --- a/api/app/models/group.rb +++ b/api/app/models/group.rb @@ -1,959 +1,993 @@ class Group < ApplicationRecord - belongs_to :user - belongs_to :fes_year - belongs_to :group_category - has_one :stage_common_option, dependent: :destroy - has_many :power_orders, dependent: :destroy - has_one :sub_rep, dependent: :destroy - has_many :employees, dependent: :destroy - has_one :place_order, dependent: :destroy - has_many :stage_orders, dependent: :destroy - has_many :food_products, dependent: :destroy - has_many :rental_orders, dependent: :destroy - has_many :assign_rental_items, dependent: :destroy - has_one :group_identification, dependent: :destroy - has_one :public_relation - has_one :venue_map - has_one :announcement - has_one :cooking_process_order - - ### group_category (参加団体カテゴリ) - - # 全てのgroupとそのgroup_categoryを取得する - def self.with_group_categories - @records = Group.preload(:group_category) - .map{ - |group| - { - "group": group, - "group_category": group.group_category - } - } - end - - # 指定したIDのgroupとそのgroup_categoryを取得する - def self.with_group_category(group_id) - @record = Group.eager_load(:group_category).where(groups: {id: group_id}) - .map{ - |group| - { - "group": group, - "group_category": group.group_category - } - } - end - - - ### group_category, fes_year (参加団体カテゴリ+開催年) - - # 全てのgroupとそのgroup_categoryとfes_yearを取得する - def self.with_group_categories_and_fes_years - @records = Group.preload(:group_category, :fes_year) - .map{ - |group| - { - "group": group, - "group_category": group.group_category, - "fes_year": group.fes_year - } - } - end - - # 全てのgroupとそれが持つorderを取得する - def self.with_order_infos - @record = Group.all - .map{ - |group| - { - "group": group, - "user": group.user.nil? ? nil: group.user, - "group_category": group.group_category.nil? ? nil : group.group_category.name, - "fes_year": group.fes_year.nil? ? nil : group.fes_year.year_num, - "sub_rep": group.sub_rep.nil? ? nil : group.sub_rep.to_info_h, - "place_order": group.place_order.nil? ? nil : group.place_order.to_place_name_h, - "stage_orders": group.stage_orders.count == 0 ? nil : group.stage_orders.map { - |stage_order| - { - "stage_order": stage_order.to_info_h - } - }, - "stage_common_option": group.stage_common_option.nil? ? nil : group.stage_common_option.to_info_h, - "power_orders": group.power_orders.count == 0 ? nil : group.power_orders.map { - |power_order| - { - "power_order": power_order.to_info_h - } - }, - "rental_orders": group.rental_orders.count == 0 ? nil : group.rental_orders.map{ - |rental_order| - { - "rental_item": rental_order.to_rental_item_info_h, - } - }, - "employees": group.employees.count == 0 ? nil : group.employees.map{ - |employee| - { - "employee": employee.to_info_h - } - }, - "food_products": group.food_products.count == 0 ? nil : group.food_products.map{ - |food_product| - { - "food_product": food_product.to_info_h, - "purchase_lists": food_product.purchase_lists.map{ - |purchase_list| - { - "purchase_list": purchase_list.to_info_h - } - } - } - }, - "public_relation": group.public_relation.nil? ? nil : group.public_relation.to_info_h, - "venue_map": group.venue_map.nil? ? nil : group.venue_map.to_info_h, - "announcement": group.announcement.nil? ? nil : group.announcement.to_info_h, - "cooking_process_order": group.cooking_process_order.nil? ? nil : group.cooking_process_order.to_info_h - } - } - end - - # 指定したIDのgroupとそれが持つorderを取得する - def self.with_order_info(group_id) - group = Group.find(group_id) - @record = - { - "group": group, - "user": group.user.nil? ? nil: group.user, - "group_category": group.group_category.nil? ? nil : group.group_category.name, - "fes_year": group.fes_year.nil? ? nil : group.fes_year.year_num, - "sub_rep": group.sub_rep.nil? ? nil : group.sub_rep.to_info_h, - "place_order": group.place_order.nil? ? nil : group.place_order.to_place_name_h, - "stage_orders": group.stage_orders.count == 0 ? nil : group.stage_orders.map { - |stage_order| - { - "stage_order": stage_order.to_info_h - } - }, - "stage_common_option": group.stage_common_option.nil? ? nil : group.stage_common_option.to_info_h, - "power_orders": group.power_orders.count == 0 ? nil : group.power_orders.map { - |power_order| - { - "power_order": power_order.to_info_h - } - }, - "rental_orders": group.rental_orders.count == 0 ? nil : group.rental_orders.map{ - |rental_order| - { - "rental_item": rental_order.to_rental_item_info_h, - } - }, - "employees": group.employees.count == 0 ? nil : group.employees.map{ - |employee| - { - "employee": employee.to_info_h - } - }, - "food_products": group.food_products.count == 0 ? nil : group.food_products.map{ - |food_product| - { - "food_product": food_product.to_info_h, - "purchase_lists": food_product.purchase_lists.map{ - |purchase_list| - { - "purchase_list": purchase_list.to_info_h - } - } - } - }, - "public_relation": group.public_relation.nil? ? nil : group.public_relation.to_info_h, - "venue_map": group.venue_map.nil? ? nil : group.venue_map.to_info_h, - "announcement": group.announcement.nil? ? nil : group.announcement.to_info_h, - "cooking_process_order": group.cooking_process_order.nil? ? nil : group.cooking_process_order.to_info_h - } - return @record - end - - # 指定したfes_yearに対応するgroupとそれが持つorderを取得する - def self.with_order_info_narrow_down_by_fes_year(fes_year_id) - @record = Group.where(groups: {fes_year_id: fes_year_id}) - .map{ - |group| - { - "group": group, - "user": group.user.nil? ? nil: group.user, - "group_category": group.group_category.nil? ? nil : group.group_category.name, - "fes_year": group.fes_year.nil? ? nil : group.fes_year.year_num, - "sub_rep": group.sub_rep.nil? ? nil : group.sub_rep.to_info_h, - "place_order": group.place_order.nil? ? nil : group.place_order.to_place_name_h, - "stage_orders": group.stage_orders.count == 0 ? nil : group.stage_orders.map { - |stage_order| - { - "stage_order": stage_order.to_info_h - } - }, - "stage_common_option": group.stage_common_option.nil? ? nil : group.stage_common_option.to_info_h, - "power_orders": group.power_orders.count == 0 ? nil : group.power_orders.map { - |power_order| - { - "power_order": power_order.to_info_h - } - }, - "rental_orders": group.rental_orders.count == 0 ? nil : group.rental_orders.map{ - |rental_order| - { - "rental_item": rental_order.to_rental_item_info_h, - } - }, - "employees": group.employees.count == 0 ? nil : group.employees.map{ - |employee| - { - "employee": employee.to_info_h - } - }, - "food_products": group.food_products.count == 0 ? nil : group.food_products.map{ - |food_product| - { - "food_product": food_product.to_info_h, - "purchase_lists": food_product.purchase_lists.map{ - |purchase_list| - { - "purchase_list": purchase_list.to_info_h - } - } - } - }, - "public_relation": group.public_relation.nil? ? nil : group.public_relation.to_info_h, - "venue_map": group.venue_map.nil? ? nil : group.venue_map.to_info_h, - "announcement": group.announcement.nil? ? nil : group.announcement.to_info_h, - "cooking_process_order": group.cooking_process_order.nil? ? nil : group.cooking_process_order.to_info_h - } - } - end - - # 検索ワードに対応するgroupとそれが持つorderを取得する - def self.with_order_info_narrow_down_by_search_word(word) - @record = Group.where("name like ?","%#{word}%") - .map{ - |group| - { - "group": group, - "user": group.user.nil? ? nil: group.user, - "group_category": group.group_category.nil? ? nil : group.group_category.name, - "fes_year": group.fes_year.nil? ? nil : group.fes_year.year_num, - "sub_rep": group.sub_rep.nil? ? nil : group.sub_rep.to_info_h, - "place_order": group.place_order.nil? ? nil : group.place_order.to_place_name_h, - "stage_orders": group.stage_orders.count == 0 ? nil : group.stage_orders.map { - |stage_order| - { - "stage_order": stage_order.to_info_h - } - }, - "stage_common_option": group.stage_common_option.nil? ? nil : group.stage_common_option.to_info_h, - "power_orders": group.power_orders.count == 0 ? nil : group.power_orders.map { - |power_order| - { - "power_order": power_order.to_info_h - } - }, - "rental_orders": group.rental_orders.count == 0 ? nil : group.rental_orders.map{ - |rental_order| - { - "rental_item": rental_order.to_rental_item_info_h, - } - }, - "employees": group.employees.count == 0 ? nil : group.employees.map{ - |employee| - { - "employee": employee.to_info_h - } - }, - "food_products": group.food_products.count == 0 ? nil : group.food_products.map{ - |food_product| - { - "food_product": food_product.to_info_h, - "purchase_lists": food_product.purchase_lists.map{ - |purchase_list| - { - "purchase_list": purchase_list.to_info_h - } - } - } - }, - "public_relation": group.public_relation.nil? ? nil : group.public_relation.id, - "venue_map": group.venue_map.nil? ? nil : group.venue_map.id, - "announcement": group.announcement.nil? ? nil : group.announcement.id, - "cooking_process_order": group.cooking_process_order.nil? ? nil : group.cooking_process_order.id - } - } - end - - # 指定したIDのgroupとそのgroup_categoryとfes_yearを取得する - def self.with_group_category_and_fes_year(group_id) - @record = Group.eager_load(:group_category).where(groups: {id: group_id}) - .map{ - |group| - { - "group": group, - "group_category": group.group_category, - "fes_year": group.fes_year - } - } - end - - - ### 申請状況一覧 - - def self.with_order_status_checks - @record = Group.all - .map{ - |group| - { - "group": group, - "user": group.user.nil? ? nil: group.user.id, - "group_category": group.group_category.nil? ? nil : group.group_category.id, - "fes_year": group.fes_year.nil? ? nil : group.fes_year.id, - "sub_rep": group.sub_rep.nil? ? nil : group.sub_rep.id, - "place_order": group.place_order.nil? ? nil : group.place_order.id, - "stage_orders": group.stage_orders.count == 0 ? nil : group.stage_orders[0].id, - "stage_common_option": group.stage_common_option.nil? ? nil : group.stage_common_option.id, - "power_orders": group.power_orders.count == 0 ? nil : group.power_orders[0].id, - "rental_orders": group.rental_orders.count == 0 ? nil : group.rental_orders[0].id, - "employees": group.employees.count == 0 ? nil : group.employees[0].id, - "food_products": group.food_products.empty? ? nil : - { - "food_product": group.food_products.first.nil? ? nil : group.food_products.first.id, - "purchase_lists": group.food_products.first.nil? || group.food_products.first.purchase_lists.empty? ? nil : group.food_products.first.purchase_lists[0].id - }, - "public_relation": group.public_relation.nil? ? nil : group.public_relation.id, - "venue_map": group.venue_map.nil? ? nil : group.venue_map.id, - "announcement": group.announcement.nil? ? nil : group.announcement.id, - "cooking_process_order": group.cooking_process_order.nil? ? nil : group.cooking_process_order.id - } - } - end - - def self.with_order_status_check(group_id) - group = Group.find(group_id) - @record = - { - "group": group, - "user": group.user.nil? ? nil: group.user.id, - "group_category": group.group_category.nil? ? nil : group.group_category.id, - "fes_year": group.fes_year.nil? ? nil : group.fes_year.id, - "sub_rep": group.sub_rep.nil? ? nil : group.sub_rep.id, - "place_order": group.place_order.nil? ? nil : group.place_order.id, - "stage_orders": group.stage_orders.count == 0 ? nil : group.stage_orders[0].id, - "stage_common_option": group.stage_common_option.nil? ? nil : group.stage_common_option.id, - "power_orders": group.power_orders.count == 0 ? nil : group.power_orders[0].id, - "rental_orders": group.rental_orders.count == 0 ? nil : group.rental_orders[0].id, - "employees": group.employees.count == 0 ? nil : group.employees[0].id, - "food_products": group.food_products.empty? ? nil : - { - "food_product": group.food_products.first.nil? ? nil : group.food_products.first.id, - "purchase_lists": group.food_products.first.nil? || group.food_products.first.purchase_lists.empty? ? nil : group.food_products.first.purchase_lists[0].id - }, - "public_relation": group.public_relation.nil? ? nil : group.public_relation.id, - "venue_map": group.venue_map.nil? ? nil : group.venue_map.id, - "announcement": group.announcement.nil? ? nil : group.announcement.id, - "cooking_process_order": group.cooking_process_order.nil? ? nil : group.cooking_process_order.id - } - return @record - end - - # 指定したfes_yearに対応するgroupとそれが持つorderを取得する - def self.with_order_status_check_narrow_down_by_fes_year(fes_year_id) - @record = Group.where(groups: {fes_year_id: fes_year_id}) - .map{ - |group| - { - "group": group, - "user": group.user.nil? ? nil: group.user.id, - "group_category": group.group_category.nil? ? nil : group.group_category.id, - "fes_year": group.fes_year.nil? ? nil : group.fes_year.id, - "sub_rep": group.sub_rep.nil? ? nil : group.sub_rep.id, - "place_order": group.place_order.nil? ? nil : group.place_order.id, - "stage_orders": group.stage_orders.count == 0 ? nil : group.stage_orders[0].id, - "stage_common_option": group.stage_common_option.nil? ? nil : group.stage_common_option.id, - "power_orders": group.power_orders.count == 0 ? nil : group.power_orders[0].id, - "rental_orders": group.rental_orders.count == 0 ? nil : group.rental_orders[0].id, - "employees": group.employees.count == 0 ? nil : group.employees[0].id, - "food_products": group.food_products.empty? ? nil : - { - "food_product": group.food_products.first.nil? ? nil : group.food_products.first.id, - "purchase_lists": group.food_products.first.nil? || group.food_products.first.purchase_lists.empty? ? nil : group.food_products.first.purchase_lists[0].id - }, - "public_relation": group.public_relation.nil? ? nil : group.public_relation.id, - "venue_map": group.venue_map.nil? ? nil : group.venue_map.id, - "announcement": group.announcement.nil? ? nil : group.announcement.id, - "cooking_process_order": group.cooking_process_order.nil? ? nil : group.cooking_process_order.id - } - } - end - - # 検索ワードに対応するgroupとそれが持つorderを取得する - def self.with_order_status_check_narrow_down_by_search_word(word) - @record = Group.where("name like ?","%#{word}%") - .map{ - |group| - { - "group": group, - "user": group.user.nil? ? nil: group.user.id, - "group_category": group.group_category.nil? ? nil : group.group_category.id, - "fes_year": group.fes_year.nil? ? nil : group.fes_year.id, - "sub_rep": group.sub_rep.nil? ? nil : group.sub_rep.id, - "place_order": group.place_order.nil? ? nil : group.place_order.id, - "stage_orders": group.stage_orders.count == 0 ? nil : group.stage_orders[0].id, - "stage_common_option": group.stage_common_option.nil? ? nil : group.stage_common_option.id, - "power_orders": group.power_orders.count == 0 ? nil : group.power_orders[0].id, - "rental_orders": group.rental_orders.count == 0 ? nil : group.rental_orders[0].id, - "employees": group.employees.count == 0 ? nil : group.employees[0].id, - "food_products": group.food_products.empty? ? nil : - { - "food_product": group.food_products.first.nil? ? nil : group.food_products.first.id, - "purchase_lists": group.food_products.first.nil? || group.food_products.first.purchase_lists.empty? ? nil : group.food_products.first.purchase_lists[0].id - }, - "public_relation": group.public_relation.nil? ? nil : group.public_relation.id, - "venue_map": group.venue_map.nil? ? nil : group.venue_map.id, - "announcement": group.announcement.nil? ? nil : group.announcement.status, - "cooking_process_order": group.cooking_process_order.nil? ? nil : group.cooking_process_order.id - } - } - end - - ### sub rep (副代表) - - # 全てのgroupとそのsub_repを取得する - def self.with_sub_reps - @records = Group.preload(:sub_rep) - .map{ - |group| - { - "group": group, - "sub_rep": group.sub_rep, - "sub_rep_info": group.sub_rep.nil? ? nil : group.sub_rep.to_info_h - } - } - end - - # 指定したIDのgroupとそのsub_repを取得する - def self.with_sub_rep(group_id) - @record = Group.eager_load(:sub_rep).where(groups: {id: group_id}) - .map{ - |group| - { - "group": group, - "sub_rep": group.sub_rep, - "sub_rep_info": group.sub_rep.nil? ? nil : group.sub_rep.to_info_h - } - } - end - - - ### place order (会場申請) - - # 全てのgroupとそのplace_orderを取得する - def self.with_place_orders - @records = Group.preload(:place_order) - .map{ - |group| - { - "group": group, - "place_order": group.place_order, - "place_order_name": group.place_order.nil? ? nil : group.place_order.to_place_name_h - } - } - end - - # 指定したIDのgroupとそのplace_orderを取得する - def self.with_place_order(group_id) - @record = Group.eager_load(:place_order) - .where(groups: {id: group_id}) - .map{ - |group| - { - "group": group, - "place_order": group.place_order, - "place_order_name": group.place_order.nil? ? nil : group.place_order.to_place_name_h - } - } - end - - - ### stage order(ステージ申請) - - # 全てのgroupとそのstage_orderを取得する - def self.with_stage_orders - @records = Group.preload(:stage_orders) - .map{ - |group| - { - "group": group, - "stage_orders": group.stage_orders.count == 0 ? nil : group.stage_orders.map{ - |stage_order| - { - "stage_order": stage_order, - "stage_order_info": stage_order.nil? ? nil : stage_order.to_info_h - } - } - } - } - end - - # 指定したIDのgroupとそのstage_orderを取得する - def self.with_stage_order(group_id) - @record = Group.eager_load(:stage_orders) - .where(groups: {id: group_id}) - .map{ - |group| - { - "group": group, - "stage_orders": group.stage_orders.count == 0 ? nil : group.stage_orders.map{ - |stage_order| - { - "stage_order": stage_order, - "stage_order_info": stage_order.nil? ? nil : stage_order.to_info_h - } - } - } - } - end - - - ### stage common option(ステージのオプション) - - # 全てのgroupとそのstage_common_optionを取得する - def self.with_stage_common_options - @records = Group.preload(:stage_common_option) - .map{ - |group| - { - "group": group, - "stage_common_option": group.stage_common_option - } - } - end - - # 指定したIDのgroupとそのstage_common_optionを取得する - def self.with_stage_common_option(group_id) - @records = Group.eager_load(:stage_common_option) - .where(groups: {id: group_id}) - .map{ - |group| - { - "group": group, - "stage_common_option": group.stage_common_option - } - } - end - - - ### power order(電力申請) - - # 全てのgroupとそのpower_orderを取得する - def self.with_power_orders - @records = Group.preload(:power_orders) - .map{ - |group| - { - "group": group, - "power_orders": group.power_orders.count == 0 ? nil : group.power_orders - } - } - end - - # 指定したIDのgroupとそのpower_orderを取得する - def self.with_power_order(group_id) - @record = Group.eager_load(:power_orders) - .where(groups: {id: group_id}) - .map{ - |group| - { - "group": group, - "power_orders": group.power_orders.count == 0 ? nil : group.power_orders - } - } - end - - - ### rental order(物品申請) - - # 全てのgroupとそのrental_orderを取得する - def self.with_rental_orders - @records = Group.preload(:rental_orders) - .map{ - |group| - { - "group": group, - "rental_orders": group.rental_orders.count == 0 ? nil : group.rental_orders.map{ - |rental_order| - { - "rental_order": rental_order, - "rental_item_name": rental_order.rental_item.name - } - } - } - } - end - - # 指定したIDのgroupとそのrental_orderを取得する - def self.with_rental_order(group_id) - @record = Group.eager_load(:rental_orders) - .where(groups: {id: group_id}) - .map{ - |group| - { - "group": group, - "rental_orders": group.rental_orders.count == 0 ? nil : group.rental_orders.map{ - |rental_order| - { - "rental_order": rental_order, - "rental_item_name": rental_order.rental_item.name - } - } - } - } - end - - - ### employee(従業員) - - # 全てのgroupとそのemployeeを取得する - def self.with_employees - @records = Group.preload(:employees) - .map{ - |group| - { - "group": group, - "employees": group.employees.count == 0 ? nil : group.employees - } - } - end - - # 指定したIDのgroupとそのemployeeを取得する - def self.with_employee(group_id) - @record = Group.eager_load(:employees) - .where(groups: {id: group_id}) - .map{ - |group| - { - "group": group, - "employees": group.employees.count == 0 ? nil : group.employees - } - } - end - - - ### food_product(調理食品) - - # 全てのgroupとそのfood_productを取得する - def self.with_food_products - @records = Group.preload(:food_products) - .map{ - |group| - { - "group": group, - "food_products": group.food_products.count == 0 ? nil : group.food_products - } - } - end - - # 指定したIDのgroupとそのfood_productを取得する - def self.with_food_product(group_id) - @record = Group.eager_load(:food_products) - .where(groups: {id: group_id}) - .map{ - |group| - { - "group": group, - "food_products": group.food_products.count == 0 ? nil : group.food_products - } - } - end - - ### public relation (PR画像・文) - - # 全てのgroupとそのpublic_relationを取得する - def self.with_public_relations - @records = Group.preload(:public_relation) - .map{ - |group| - { - "group": group, - "picture_name": group.public_relation.nil? ? nil : group.public_relation.picture_name, - "picture_path": group.public_relation.nil? ? nil : group.public_relation.picture_path, - "blurb": group.public_relation.nil? ? nil : group.public_relation.blurb, - "created_at": group.public_relation.nil? ? nil : group.public_relation.created_at, - "updated_at": group.public_relation.nil? ? nil : group.public_relation.updated_at, - } - } - end - - # 指定したIDのgroupとそのpublic_relationを取得する - def self.with_public_relation(group_id) - @record = Group.eager_load(:public_relation).where(groups: {id: group_id}) - .map{ - |group| - { - "group": group, - "public_relation_id": group.public_relation.nil? ? nil : group.public_relation.id, - "picture_name": group.public_relation.nil? ? nil : group.public_relation.picture_name, - "picture_path": group.public_relation.nil? ? nil : group.public_relation.picture_path, - "blurb": group.public_relation.nil? ? nil : group.public_relation.blurb, - "created_at": group.public_relation.nil? ? nil : group.public_relation.created_at, - "updated_at": group.public_relation.nil? ? nil : group.public_relation.updated_at, - } - } - end - - # public_relationが存在しないgroupのみ取得する - def self.have_no_public_relation(fes_year_id) - @records = Group.eager_load(:public_relation).where(groups: {fes_year_id: fes_year_id}).filter_map { |group| group if group.public_relation.nil? } - end - - # 指定したfes_yearに対応するgroupとそのpublic_relationを取得する - def self.with_public_relation_narrow_down_by_fes_year(fes_year_id) - @record = Group.eager_load(:public_relation).where(groups: {fes_year_id: fes_year_id}) - .map{ - |group| - { - "group": group, - "picture_name": group.public_relation.nil? ? nil : group.public_relation.picture_name, - "picture_path": group.public_relation.nil? ? nil : group.public_relation.picture_path, - "blurb": group.public_relation.nil? ? nil : group.public_relation.blurb, - "created_at": group.public_relation.nil? ? nil : group.public_relation.created_at, - "updated_at": group.public_relation.nil? ? nil : group.public_relation.updated_at, - } - } - end - - # 検索ワードに対応するgroupとそのpublic_relationを取得する - def self.with_public_relation_narrow_down_by_search_word(word) - @record = Group.eager_load(:public_relation).where("name like ?","%#{word}%") - .map{ - |group| - { - "group": group, - "picture_name": group.public_relation.nil? ? nil : group.public_relation.picture_name, - "picture_path": group.public_relation.nil? ? nil : group.public_relation.picture_path, - "blurb": group.public_relation.nil? ? nil : group.public_relation.blurb, - "created_at": group.public_relation.nil? ? nil : group.public_relation.created_at, - "updated_at": group.public_relation.nil? ? nil : group.public_relation.updated_at, - } - } - end - - ### announcement (アナウンス文) - - # 全てのgroupとそのannouncementを取得する - def self.with_announcements - @records = Group.preload(:announcement) - .map{ - |group| - { - "group": group, - "announcement": group.announcement, - } - } - end - - # 指定したIDのgroupとそのannouncementを取得する - def self.with_announcement(group_id) - @record = Group.eager_load(:announcement).where(groups: {id: group_id}) - .map{ - |group| - { - "group": group, - "announcement": group.announcement, - } - } - end - - # announcementが存在しないgroupのみ取得する - def self.have_no_announcement(fes_year_id) - @records = Group.eager_load(:announcement).where(groups: {fes_year_id: fes_year_id}).filter_map { |group| group if group.announcement.nil? } - end - - # 指定したfes_yearに対応するgroupとそのannouncementを取得する - def self.with_announcement_narrow_down_by_fes_year(fes_year_id) - @record = Group.eager_load(:announcement).where(groups: {fes_year_id: fes_year_id}) - .map{ - |group| - { - "group": group, - "announcement": group.announcement, - } - } - end - - # 検索ワードに対応するgroupとそのannouncementを取得する - def self.with_announcement_narrow_down_by_search_word(word) - @record = Group.eager_load(:announcement).where("name like ?","%#{word}%") - .map{ - |group| - { - "group": group, - "announcement": group.announcement, - } - } - end - - ### venue map (模擬店平面図) - - # 全てのgroupとそのvenue_mapを取得する - def self.with_venue_maps - @records = Group.preload(:venue_map) - .map{ - |group| - { - "group": group, - "venue_map": group.venue_map, - } - } - end - - # 指定したIDのgroupとそのvenue_mapを取得する - def self.with_venue_map(group_id) - @record = Group.eager_load(:venue_map).where(groups: {id: group_id}) - .map{ - |group| - { - "group": group, - "venue_map": group.venue_map, - } - } - end - - # venue_mapが存在しないgroupのみ取得する - def self.have_no_venue_map(fes_year_id) - @records = Group.eager_load(:venue_map).where(groups: {fes_year_id: fes_year_id}).filter_map { |group| group if group.venue_map.nil? } - end - - # 指定したfes_yearに対応するgroupとそのvenue_mapを取得する - def self.with_venue_map_narrow_down_by_fes_year(fes_year_id) - @record = Group.eager_load(:venue_map).where(groups: {fes_year_id: fes_year_id}) - .map{ - |group| - { - "group": group, - "venue_map": group.venue_map, - } - } - end - - # 検索ワードに対応するgroupとそのvenue_mapを取得する - def self.with_venue_map_narrow_down_by_search_word(word) - @record = Group.eager_load(:venue_map).where("name like ?","%#{word}%") - .map{ - |group| - { - "group": group, - "venue_map": group.venue_map, - } - } - end - - # 全てのgroupとそのcooking_process_orderを取得する - def self.with_cooking_process_orders - @record = Group.eager_load(:cooking_process_order) - .map{ - |group| - { - "group": group, - "cooking_process_order": group.cooking_process_order, - } - } - end - - # 指定したIDのgroupとそのcooking_process_orderを取得する - def self.with_cooking_process_order(group_id) - @record = Group.eager_load(:cooking_process_order).where(id: group_id) - .map{ - |group| - { - "group": group, - "cooking_process_order": group.cooking_process_order, - } - } - end - - # cooking_process_orderが存在しないgroupのみ取得する - def self.have_no_cooking_process_order(fes_year_id) - Group.eager_load(:cooking_process_order) - .where(fes_year_id: fes_year_id) - .filter_map { |group| group if group.cooking_process_order.nil? } - end - - # 指定したfes_yearに対応するgroupとそのcooking_process_orderを取得する - def self.with_cooking_process_order_narrow_down_by_fes_year(fes_year_id) - Group.eager_load(:cooking_process_order) - .where(fes_year_id: fes_year_id) - .map do |group| - { - "group": group, - "cooking_process_order": group.cooking_process_order, - } - end - end - - # 検索ワードに対応するgroupとそのcooking_process_orderを取得する - def self.with_cooking_process_order_narrow_down_by_search_word(word) - Group.eager_load(:cooking_process_order) - .where("name LIKE ?", "%#{word}%") - .map do |group| - { - "group": group, - "cooking_process_order": group.cooking_process_order, - } - end - end - - # 割り当てられたステージを取得 - def stage - return self.group_identification.nil? || self.group_identification.stage_number.nil? ? nil : self.group_identification.stage_number.stage.name - end - - # 割り当てられた会場を取得 - def place - return self.group_identification.nil? || self.group_identification.place_number.nil? ? nil : self.group_identification.place_number.place.name - end - - # 識別番号取得 - def number - return self.group_identification.nil? ? nil : self.group_identification.number - end - - # 開催日取得 - def date - return self.group_identification.nil? ? nil : self.group_identification.date - end - - # 電力申請の総和を計算する - def sum_power_orders - sum = 0 - self.power_orders.each do |power_order| - sum += power_order.power - end - return sum - end - - # 購入品の個数を計算する - def count_purchase_lists - count = 0 - self.food_products.each do |food_product| - count += food_product.purchase_lists.count - end - return count - end - - # 物品の未配分を計算する - def unallocated_rental_items - unallocated_rental_items = self.rental_orders.preload(:rental_item).map{ - |rental_order| - { - "item": rental_order.rental_item.name, - "num": rental_order.num - self.assign_rental_items.map{ |assign_rental_item| assign_rental_item.num }.sum - } - } - return unallocated_rental_items + belongs_to :user + belongs_to :fes_year + belongs_to :group_category + has_one :stage_common_option, dependent: :destroy + has_many :power_orders, dependent: :destroy + has_one :sub_rep, dependent: :destroy + has_many :employees, dependent: :destroy + has_one :place_order, dependent: :destroy + has_many :stage_orders, dependent: :destroy + has_many :food_products, dependent: :destroy + has_many :rental_orders, dependent: :destroy + has_many :assign_rental_items, dependent: :destroy + has_one :group_identification, dependent: :destroy + has_one :public_relation + has_one :venue_map + has_one :announcement + has_one :cooking_process_order + + ### group_category (参加団体カテゴリ) + + # 全てのgroupとそのgroup_categoryを取得する + def self.with_group_categories + @records = Group.preload(:group_category) + .map do |group| + { + "group": group, + "group_category": group.group_category + } + end + end + + # 指定したIDのgroupとそのgroup_categoryを取得する + def self.with_group_category(group_id) + @record = Group.eager_load(:group_category).where(groups: { id: group_id }) + .map do |group| + { + "group": group, + "group_category": group.group_category + } + end + end + + ### group_category, fes_year (参加団体カテゴリ+開催年) + + # 全てのgroupとそのgroup_categoryとfes_yearを取得する + def self.with_group_categories_and_fes_years + @records = Group.preload(:group_category, :fes_year) + .map do |group| + { + "group": group, + "group_category": group.group_category, + "fes_year": group.fes_year + } + end + end + + # 全てのgroupとそれが持つorderを取得する + def self.with_order_infos + @record = Group.all + .map do |group| + { + "group": group, + "user": group.user.nil? ? nil : group.user, + "group_category": group.group_category.nil? ? nil : group.group_category.name, + "fes_year": group.fes_year.nil? ? nil : group.fes_year.year_num, + "sub_rep": group.sub_rep.nil? ? nil : group.sub_rep.to_info_h, + "place_order": group.place_order.nil? ? nil : group.place_order.to_place_name_h, + "stage_orders": if group.stage_orders.count == 0 + nil + else + group.stage_orders.map do |stage_order| + { + "stage_order": stage_order.to_info_h + } + end + end, + "stage_common_option": group.stage_common_option.nil? ? nil : group.stage_common_option.to_info_h, + "power_orders": if group.power_orders.count == 0 + nil + else + group.power_orders.map do |power_order| + { + "power_order": power_order.to_info_h + } + end + end, + "rental_orders": if group.rental_orders.count == 0 + nil + else + group.rental_orders.map do |rental_order| + { + "rental_item": rental_order.to_rental_item_info_h + } + end + end, + "employees": if group.employees.count == 0 + nil + else + group.employees.map do |employee| + { + "employee": employee.to_info_h + } + end + end, + "food_products": if group.food_products.count == 0 + nil + else + group.food_products.map do |food_product| + { + "food_product": food_product.to_info_h, + "purchase_lists": food_product.purchase_lists.map do |purchase_list| + { + "purchase_list": purchase_list.to_info_h + } + end + } + end + end, + "public_relation": group.public_relation.nil? ? nil : group.public_relation.to_info_h, + "venue_map": group.venue_map.nil? ? nil : group.venue_map.to_info_h, + "announcement": group.announcement.nil? ? nil : group.announcement.to_info_h, + "cooking_process_order": group.cooking_process_order.nil? ? nil : group.cooking_process_order.to_info_h + } + end + end + + # 指定したIDのgroupとそれが持つorderを取得する + def self.with_order_info(group_id) + group = Group.find(group_id) + @record = + { + "group": group, + "user": group.user.nil? ? nil : group.user, + "group_category": group.group_category.nil? ? nil : group.group_category.name, + "fes_year": group.fes_year.nil? ? nil : group.fes_year.year_num, + "sub_rep": group.sub_rep.nil? ? nil : group.sub_rep.to_info_h, + "place_order": group.place_order.nil? ? nil : group.place_order.to_place_name_h, + "stage_orders": if group.stage_orders.count == 0 + nil + else + group.stage_orders.map do |stage_order| + { + "stage_order": stage_order.to_info_h + } + end + end, + "stage_common_option": group.stage_common_option.nil? ? nil : group.stage_common_option.to_info_h, + "power_orders": if group.power_orders.count == 0 + nil + else + group.power_orders.map do |power_order| + { + "power_order": power_order.to_info_h + } + end + end, + "rental_orders": if group.rental_orders.count == 0 + nil + else + group.rental_orders.map do |rental_order| + { + "rental_item": rental_order.to_rental_item_info_h + } + end + end, + "employees": if group.employees.count == 0 + nil + else + group.employees.map do |employee| + { + "employee": employee.to_info_h + } + end + end, + "food_products": if group.food_products.count == 0 + nil + else + group.food_products.map do |food_product| + { + "food_product": food_product.to_info_h, + "purchase_lists": food_product.purchase_lists.map do |purchase_list| + { + "purchase_list": purchase_list.to_info_h + } + end + } + end + end, + "public_relation": group.public_relation.nil? ? nil : group.public_relation.to_info_h, + "venue_map": group.venue_map.nil? ? nil : group.venue_map.to_info_h, + "announcement": group.announcement.nil? ? nil : group.announcement.to_info_h, + "cooking_process_order": group.cooking_process_order.nil? ? nil : group.cooking_process_order.to_info_h + } + @record + end + + # 指定したfes_yearに対応するgroupとそれが持つorderを取得する + def self.with_order_info_narrow_down_by_fes_year(fes_year_id) + @record = Group.where(groups: { fes_year_id: fes_year_id }) + .map do |group| + { + "group": group, + "user": group.user.nil? ? nil : group.user, + "group_category": group.group_category.nil? ? nil : group.group_category.name, + "fes_year": group.fes_year.nil? ? nil : group.fes_year.year_num, + "sub_rep": group.sub_rep.nil? ? nil : group.sub_rep.to_info_h, + "place_order": group.place_order.nil? ? nil : group.place_order.to_place_name_h, + "stage_orders": if group.stage_orders.count == 0 + nil + else + group.stage_orders.map do |stage_order| + { + "stage_order": stage_order.to_info_h + } + end + end, + "stage_common_option": group.stage_common_option.nil? ? nil : group.stage_common_option.to_info_h, + "power_orders": if group.power_orders.count == 0 + nil + else + group.power_orders.map do |power_order| + { + "power_order": power_order.to_info_h + } + end + end, + "rental_orders": if group.rental_orders.count == 0 + nil + else + group.rental_orders.map do |rental_order| + { + "rental_item": rental_order.to_rental_item_info_h + } + end + end, + "employees": if group.employees.count == 0 + nil + else + group.employees.map do |employee| + { + "employee": employee.to_info_h + } + end + end, + "food_products": if group.food_products.count == 0 + nil + else + group.food_products.map do |food_product| + { + "food_product": food_product.to_info_h, + "purchase_lists": food_product.purchase_lists.map do |purchase_list| + { + "purchase_list": purchase_list.to_info_h + } + end + } + end + end, + "public_relation": group.public_relation.nil? ? nil : group.public_relation.to_info_h, + "venue_map": group.venue_map.nil? ? nil : group.venue_map.to_info_h, + "announcement": group.announcement.nil? ? nil : group.announcement.to_info_h, + "cooking_process_order": group.cooking_process_order.nil? ? nil : group.cooking_process_order.to_info_h + } + end + end + + # 検索ワードに対応するgroupとそれが持つorderを取得する + def self.with_order_info_narrow_down_by_search_word(word) + @record = Group.where('name like ?', "%#{word}%") + .map do |group| + { + "group": group, + "user": group.user.nil? ? nil : group.user, + "group_category": group.group_category.nil? ? nil : group.group_category.name, + "fes_year": group.fes_year.nil? ? nil : group.fes_year.year_num, + "sub_rep": group.sub_rep.nil? ? nil : group.sub_rep.to_info_h, + "place_order": group.place_order.nil? ? nil : group.place_order.to_place_name_h, + "stage_orders": if group.stage_orders.count == 0 + nil + else + group.stage_orders.map do |stage_order| + { + "stage_order": stage_order.to_info_h + } + end + end, + "stage_common_option": group.stage_common_option.nil? ? nil : group.stage_common_option.to_info_h, + "power_orders": if group.power_orders.count == 0 + nil + else + group.power_orders.map do |power_order| + { + "power_order": power_order.to_info_h + } + end + end, + "rental_orders": if group.rental_orders.count == 0 + nil + else + group.rental_orders.map do |rental_order| + { + "rental_item": rental_order.to_rental_item_info_h + } + end + end, + "employees": if group.employees.count == 0 + nil + else + group.employees.map do |employee| + { + "employee": employee.to_info_h + } + end + end, + "food_products": if group.food_products.count == 0 + nil + else + group.food_products.map do |food_product| + { + "food_product": food_product.to_info_h, + "purchase_lists": food_product.purchase_lists.map do |purchase_list| + { + "purchase_list": purchase_list.to_info_h + } + end + } + end + end, + "public_relation": group.public_relation.nil? ? nil : group.public_relation.id, + "venue_map": group.venue_map.nil? ? nil : group.venue_map.id, + "announcement": group.announcement.nil? ? nil : group.announcement.id, + "cooking_process_order": group.cooking_process_order.nil? ? nil : group.cooking_process_order.id + } + end + end + + # 指定したIDのgroupとそのgroup_categoryとfes_yearを取得する + def self.with_group_category_and_fes_year(group_id) + @record = Group.eager_load(:group_category).where(groups: { id: group_id }) + .map do |group| + { + "group": group, + "group_category": group.group_category, + "fes_year": group.fes_year + } + end + end + + ### 申請状況一覧 + + def self.with_order_status_checks + @record = Group.all + .map do |group| + { + "group": group, + "user": group.user.nil? ? nil : group.user.id, + "group_category": group.group_category.nil? ? nil : group.group_category.id, + "fes_year": group.fes_year.nil? ? nil : group.fes_year.id, + "sub_rep": group.sub_rep.nil? ? nil : group.sub_rep.id, + "place_order": group.place_order.nil? ? nil : group.place_order.id, + "stage_orders": group.stage_orders.count == 0 ? nil : group.stage_orders[0].id, + "stage_common_option": group.stage_common_option.nil? ? nil : group.stage_common_option.id, + "power_orders": group.power_orders.count == 0 ? nil : group.power_orders[0].id, + "rental_orders": group.rental_orders.count == 0 ? nil : group.rental_orders[0].id, + "employees": group.employees.count == 0 ? nil : group.employees[0].id, + "food_products": if group.food_products.empty? + nil + else + { + "food_product": group.food_products.first.nil? ? nil : group.food_products.first.id, + "purchase_lists": group.food_products.first.nil? || group.food_products.first.purchase_lists.empty? ? nil : group.food_products.first.purchase_lists[0].id + } + end, + "public_relation": group.public_relation.nil? ? nil : group.public_relation.id, + "venue_map": group.venue_map.nil? ? nil : group.venue_map.id, + "announcement": group.announcement.nil? ? nil : group.announcement.id, + "cooking_process_order": group.cooking_process_order.nil? ? nil : group.cooking_process_order.id + } + end + end + + def self.with_order_status_check(group_id) + group = Group.find(group_id) + @record = + { + "group": group, + "user": group.user.nil? ? nil : group.user.id, + "group_category": group.group_category.nil? ? nil : group.group_category.id, + "fes_year": group.fes_year.nil? ? nil : group.fes_year.id, + "sub_rep": group.sub_rep.nil? ? nil : group.sub_rep.id, + "place_order": group.place_order.nil? ? nil : group.place_order.id, + "stage_orders": group.stage_orders.count == 0 ? nil : group.stage_orders[0].id, + "stage_common_option": group.stage_common_option.nil? ? nil : group.stage_common_option.id, + "power_orders": group.power_orders.count == 0 ? nil : group.power_orders[0].id, + "rental_orders": group.rental_orders.count == 0 ? nil : group.rental_orders[0].id, + "employees": group.employees.count == 0 ? nil : group.employees[0].id, + "food_products": if group.food_products.empty? + nil + else + { + "food_product": group.food_products.first.nil? ? nil : group.food_products.first.id, + "purchase_lists": group.food_products.first.nil? || group.food_products.first.purchase_lists.empty? ? nil : group.food_products.first.purchase_lists[0].id + } + end, + "public_relation": group.public_relation.nil? ? nil : group.public_relation.id, + "venue_map": group.venue_map.nil? ? nil : group.venue_map.id, + "announcement": group.announcement.nil? ? nil : group.announcement.id, + "cooking_process_order": group.cooking_process_order.nil? ? nil : group.cooking_process_order.id + } + @record + end + + # 指定したfes_yearに対応するgroupとそれが持つorderを取得する + def self.with_order_status_check_narrow_down_by_fes_year(fes_year_id) + @record = Group.where(groups: { fes_year_id: fes_year_id }) + .map do |group| + { + "group": group, + "user": group.user.nil? ? nil : group.user.id, + "group_category": group.group_category.nil? ? nil : group.group_category.id, + "fes_year": group.fes_year.nil? ? nil : group.fes_year.id, + "sub_rep": group.sub_rep.nil? ? nil : group.sub_rep.id, + "place_order": group.place_order.nil? ? nil : group.place_order.id, + "stage_orders": group.stage_orders.count == 0 ? nil : group.stage_orders[0].id, + "stage_common_option": group.stage_common_option.nil? ? nil : group.stage_common_option.id, + "power_orders": group.power_orders.count == 0 ? nil : group.power_orders[0].id, + "rental_orders": group.rental_orders.count == 0 ? nil : group.rental_orders[0].id, + "employees": group.employees.count == 0 ? nil : group.employees[0].id, + "food_products": if group.food_products.empty? + nil + else + { + "food_product": group.food_products.first.nil? ? nil : group.food_products.first.id, + "purchase_lists": group.food_products.first.nil? || group.food_products.first.purchase_lists.empty? ? nil : group.food_products.first.purchase_lists[0].id + } + end, + "public_relation": group.public_relation.nil? ? nil : group.public_relation.id, + "venue_map": group.venue_map.nil? ? nil : group.venue_map.id, + "announcement": group.announcement.nil? ? nil : group.announcement.id, + "cooking_process_order": group.cooking_process_order.nil? ? nil : group.cooking_process_order.id + } + end + end + + # 検索ワードに対応するgroupとそれが持つorderを取得する + def self.with_order_status_check_narrow_down_by_search_word(word) + @record = Group.where('name like ?', "%#{word}%") + .map do |group| + { + "group": group, + "user": group.user.nil? ? nil : group.user.id, + "group_category": group.group_category.nil? ? nil : group.group_category.id, + "fes_year": group.fes_year.nil? ? nil : group.fes_year.id, + "sub_rep": group.sub_rep.nil? ? nil : group.sub_rep.id, + "place_order": group.place_order.nil? ? nil : group.place_order.id, + "stage_orders": group.stage_orders.count == 0 ? nil : group.stage_orders[0].id, + "stage_common_option": group.stage_common_option.nil? ? nil : group.stage_common_option.id, + "power_orders": group.power_orders.count == 0 ? nil : group.power_orders[0].id, + "rental_orders": group.rental_orders.count == 0 ? nil : group.rental_orders[0].id, + "employees": group.employees.count == 0 ? nil : group.employees[0].id, + "food_products": if group.food_products.empty? + nil + else + { + "food_product": group.food_products.first.nil? ? nil : group.food_products.first.id, + "purchase_lists": group.food_products.first.nil? || group.food_products.first.purchase_lists.empty? ? nil : group.food_products.first.purchase_lists[0].id + } + end, + "public_relation": group.public_relation.nil? ? nil : group.public_relation.id, + "venue_map": group.venue_map.nil? ? nil : group.venue_map.id, + "announcement": group.announcement.nil? ? nil : group.announcement.status, + "cooking_process_order": group.cooking_process_order.nil? ? nil : group.cooking_process_order.id + } + end + end + + ### sub rep (副代表) + + # 全てのgroupとそのsub_repを取得する + def self.with_sub_reps + @records = Group.preload(:sub_rep) + .map do |group| + { + "group": group, + "sub_rep": group.sub_rep, + "sub_rep_info": group.sub_rep.nil? ? nil : group.sub_rep.to_info_h + } + end + end + + # 指定したIDのgroupとそのsub_repを取得する + def self.with_sub_rep(group_id) + @record = Group.eager_load(:sub_rep).where(groups: { id: group_id }) + .map do |group| + { + "group": group, + "sub_rep": group.sub_rep, + "sub_rep_info": group.sub_rep.nil? ? nil : group.sub_rep.to_info_h + } + end + end + + ### place order (会場申請) + + # 全てのgroupとそのplace_orderを取得する + def self.with_place_orders + @records = Group.preload(:place_order) + .map do |group| + { + "group": group, + "place_order": group.place_order, + "place_order_name": group.place_order.nil? ? nil : group.place_order.to_place_name_h + } + end + end + + # 指定したIDのgroupとそのplace_orderを取得する + def self.with_place_order(group_id) + @record = Group.eager_load(:place_order) + .where(groups: { id: group_id }) + .map do |group| + { + "group": group, + "place_order": group.place_order, + "place_order_name": group.place_order.nil? ? nil : group.place_order.to_place_name_h + } + end + end + + ### stage order(ステージ申請) + + # 全てのgroupとそのstage_orderを取得する + def self.with_stage_orders + @records = Group.preload(:stage_orders) + .map do |group| + { + "group": group, + "stage_orders": if group.stage_orders.count == 0 + nil + else + group.stage_orders.map do |stage_order| + { + "stage_order": stage_order, + "stage_order_info": stage_order.nil? ? nil : stage_order.to_info_h + } + end + end + } + end + end + + # 指定したIDのgroupとそのstage_orderを取得する + def self.with_stage_order(group_id) + @record = Group.eager_load(:stage_orders) + .where(groups: { id: group_id }) + .map do |group| + { + "group": group, + "stage_orders": if group.stage_orders.count == 0 + nil + else + group.stage_orders.map do |stage_order| + { + "stage_order": stage_order, + "stage_order_info": stage_order.nil? ? nil : stage_order.to_info_h + } + end + end + } + end + end + + ### stage common option(ステージのオプション) + + # 全てのgroupとそのstage_common_optionを取得する + def self.with_stage_common_options + @records = Group.preload(:stage_common_option) + .map do |group| + { + "group": group, + "stage_common_option": group.stage_common_option + } + end + end + + # 指定したIDのgroupとそのstage_common_optionを取得する + def self.with_stage_common_option(group_id) + @records = Group.eager_load(:stage_common_option) + .where(groups: { id: group_id }) + .map do |group| + { + "group": group, + "stage_common_option": group.stage_common_option + } + end + end + + ### power order(電力申請) + + # 全てのgroupとそのpower_orderを取得する + def self.with_power_orders + @records = Group.preload(:power_orders) + .map do |group| + { + "group": group, + "power_orders": group.power_orders.count == 0 ? nil : group.power_orders + } + end + end + + # 指定したIDのgroupとそのpower_orderを取得する + def self.with_power_order(group_id) + @record = Group.eager_load(:power_orders) + .where(groups: { id: group_id }) + .map do |group| + { + "group": group, + "power_orders": group.power_orders.count == 0 ? nil : group.power_orders + } + end + end + + ### rental order(物品申請) + + # 全てのgroupとそのrental_orderを取得する + def self.with_rental_orders + @records = Group.preload(:rental_orders) + .map do |group| + { + "group": group, + "rental_orders": if group.rental_orders.count == 0 + nil + else + group.rental_orders.map do |rental_order| + { + "rental_order": rental_order, + "rental_item_name": rental_order.rental_item.name + } + end + end + } + end + end + + # 指定したIDのgroupとそのrental_orderを取得する + def self.with_rental_order(group_id) + @record = Group.eager_load(:rental_orders) + .where(groups: { id: group_id }) + .map do |group| + { + "group": group, + "rental_orders": if group.rental_orders.count == 0 + nil + else + group.rental_orders.map do |rental_order| + { + "rental_order": rental_order, + "rental_item_name": rental_order.rental_item.name + } + end + end + } + end + end + + ### employee(従業員) + + # 全てのgroupとそのemployeeを取得する + def self.with_employees + @records = Group.preload(:employees) + .map do |group| + { + "group": group, + "employees": group.employees.count == 0 ? nil : group.employees + } + end + end + + # 指定したIDのgroupとそのemployeeを取得する + def self.with_employee(group_id) + @record = Group.eager_load(:employees) + .where(groups: { id: group_id }) + .map do |group| + { + "group": group, + "employees": group.employees.count == 0 ? nil : group.employees + } + end + end + + ### food_product(調理食品) + + # 全てのgroupとそのfood_productを取得する + def self.with_food_products + @records = Group.preload(:food_products) + .map do |group| + { + "group": group, + "food_products": group.food_products.count == 0 ? nil : group.food_products + } + end + end + + # 指定したIDのgroupとそのfood_productを取得する + def self.with_food_product(group_id) + @record = Group.eager_load(:food_products) + .where(groups: { id: group_id }) + .map do |group| + { + "group": group, + "food_products": group.food_products.count == 0 ? nil : group.food_products + } + end + end + + ### public relation (PR画像・文) + + # 全てのgroupとそのpublic_relationを取得する + def self.with_public_relations + @records = Group.preload(:public_relation) + .map do |group| + { + "group": group, + "picture_name": group.public_relation.nil? ? nil : group.public_relation.picture_name, + "picture_path": group.public_relation.nil? ? nil : group.public_relation.picture_path, + "blurb": group.public_relation.nil? ? nil : group.public_relation.blurb, + "created_at": group.public_relation.nil? ? nil : group.public_relation.created_at, + "updated_at": group.public_relation.nil? ? nil : group.public_relation.updated_at + } + end + end + + # 指定したIDのgroupとそのpublic_relationを取得する + def self.with_public_relation(group_id) + @record = Group.eager_load(:public_relation).where(groups: { id: group_id }) + .map do |group| + { + "group": group, + "public_relation_id": group.public_relation.nil? ? nil : group.public_relation.id, + "picture_name": group.public_relation.nil? ? nil : group.public_relation.picture_name, + "picture_path": group.public_relation.nil? ? nil : group.public_relation.picture_path, + "blurb": group.public_relation.nil? ? nil : group.public_relation.blurb, + "created_at": group.public_relation.nil? ? nil : group.public_relation.created_at, + "updated_at": group.public_relation.nil? ? nil : group.public_relation.updated_at + } + end + end + + # public_relationが存在しないgroupのみ取得する + def self.have_no_public_relation(fes_year_id) + @records = Group.eager_load(:public_relation).where(groups: { fes_year_id: fes_year_id }).filter_map do |group| + group if group.public_relation.nil? + end + end + + # 指定したfes_yearに対応するgroupとそのpublic_relationを取得する + def self.with_public_relation_narrow_down_by_fes_year(fes_year_id) + @record = Group.eager_load(:public_relation).where(groups: { fes_year_id: fes_year_id }) + .map do |group| + { + "group": group, + "picture_name": group.public_relation.nil? ? nil : group.public_relation.picture_name, + "picture_path": group.public_relation.nil? ? nil : group.public_relation.picture_path, + "blurb": group.public_relation.nil? ? nil : group.public_relation.blurb, + "created_at": group.public_relation.nil? ? nil : group.public_relation.created_at, + "updated_at": group.public_relation.nil? ? nil : group.public_relation.updated_at + } + end + end + + # 検索ワードに対応するgroupとそのpublic_relationを取得する + def self.with_public_relation_narrow_down_by_search_word(word) + @record = Group.eager_load(:public_relation).where('name like ?', "%#{word}%") + .map do |group| + { + "group": group, + "picture_name": group.public_relation.nil? ? nil : group.public_relation.picture_name, + "picture_path": group.public_relation.nil? ? nil : group.public_relation.picture_path, + "blurb": group.public_relation.nil? ? nil : group.public_relation.blurb, + "created_at": group.public_relation.nil? ? nil : group.public_relation.created_at, + "updated_at": group.public_relation.nil? ? nil : group.public_relation.updated_at + } + end + end + + ### announcement (アナウンス文) + + # 全てのgroupとそのannouncementを取得する + def self.with_announcements + @records = Group.preload(:announcement) + .map do |group| + { + "group": group, + "announcement": group.announcement + } + end + end + + # 指定したIDのgroupとそのannouncementを取得する + def self.with_announcement(group_id) + @record = Group.eager_load(:announcement).where(groups: { id: group_id }) + .map do |group| + { + "group": group, + "announcement": group.announcement + } + end + end + + # announcementが存在しないgroupのみ取得する + def self.have_no_announcement(fes_year_id) + @records = Group.eager_load(:announcement).where(groups: { fes_year_id: fes_year_id }).filter_map do |group| + group if group.announcement.nil? + end + end + + # 指定したfes_yearに対応するgroupとそのannouncementを取得する + def self.with_announcement_narrow_down_by_fes_year(fes_year_id) + @record = Group.eager_load(:announcement).where(groups: { fes_year_id: fes_year_id }) + .map do |group| + { + "group": group, + "announcement": group.announcement + } + end + end + + # 検索ワードに対応するgroupとそのannouncementを取得する + def self.with_announcement_narrow_down_by_search_word(word) + @record = Group.eager_load(:announcement).where('name like ?', "%#{word}%") + .map do |group| + { + "group": group, + "announcement": group.announcement + } + end + end + + ### venue map (模擬店平面図) + + # 全てのgroupとそのvenue_mapを取得する + def self.with_venue_maps + @records = Group.preload(:venue_map) + .map do |group| + { + "group": group, + "venue_map": group.venue_map + } + end + end + + # 指定したIDのgroupとそのvenue_mapを取得する + def self.with_venue_map(group_id) + @record = Group.eager_load(:venue_map).where(groups: { id: group_id }) + .map do |group| + { + "group": group, + "venue_map": group.venue_map + } + end + end + + # venue_mapが存在しないgroupのみ取得する + def self.have_no_venue_map(fes_year_id) + @records = Group.eager_load(:venue_map).where(groups: { fes_year_id: fes_year_id }).filter_map do |group| + group if group.venue_map.nil? + end + end + + # 指定したfes_yearに対応するgroupとそのvenue_mapを取得する + def self.with_venue_map_narrow_down_by_fes_year(fes_year_id) + @record = Group.eager_load(:venue_map).where(groups: { fes_year_id: fes_year_id }) + .map do |group| + { + "group": group, + "venue_map": group.venue_map + } end + end + # 検索ワードに対応するgroupとそのvenue_mapを取得する + def self.with_venue_map_narrow_down_by_search_word(word) + @record = Group.eager_load(:venue_map).where('name like ?', "%#{word}%") + .map do |group| + { + "group": group, + "venue_map": group.venue_map + } + end + end + + # 全てのgroupとそのcooking_process_orderを取得する + def self.with_cooking_process_orders + @record = Group.eager_load(:cooking_process_order) + .map do |group| + { + "group": group, + "cooking_process_order": group.cooking_process_order + } + end + end + + # 指定したIDのgroupとそのcooking_process_orderを取得する + def self.with_cooking_process_order(group_id) + @record = Group.eager_load(:cooking_process_order).where(id: group_id) + .map do |group| + { + "group": group, + "cooking_process_order": group.cooking_process_order + } + end + end + + # cooking_process_orderが存在しないgroupのみ取得する + def self.have_no_cooking_process_order(fes_year_id) + Group.eager_load(:cooking_process_order) + .where(fes_year_id: fes_year_id) + .filter_map { |group| group if group.cooking_process_order.nil? } + end + + # 指定したfes_yearに対応するgroupとそのcooking_process_orderを取得する + def self.with_cooking_process_order_narrow_down_by_fes_year(fes_year_id) + Group.eager_load(:cooking_process_order) + .where(fes_year_id: fes_year_id) + .map do |group| + { + "group": group, + "cooking_process_order": group.cooking_process_order + } + end + end + + # 検索ワードに対応するgroupとそのcooking_process_orderを取得する + def self.with_cooking_process_order_narrow_down_by_search_word(word) + Group.eager_load(:cooking_process_order) + .where('name LIKE ?', "%#{word}%") + .map do |group| + { + "group": group, + "cooking_process_order": group.cooking_process_order + } + end + end + + # 割り当てられたステージを取得 + def stage + group_identification.nil? || group_identification.stage_number.nil? ? nil : group_identification.stage_number.stage.name + end + + # 割り当てられた会場を取得 + def place + group_identification.nil? || group_identification.place_number.nil? ? nil : group_identification.place_number.place.name + end + + # 識別番号取得 + def number + group_identification.nil? ? nil : group_identification.number + end + + # 開催日取得 + def date + group_identification.nil? ? nil : group_identification.date + end + + # 電力申請の総和を計算する + def sum_power_orders + sum = 0 + power_orders.each do |power_order| + sum += power_order.power + end + sum + end + + # 購入品の個数を計算する + def count_purchase_lists + count = 0 + food_products.each do |food_product| + count += food_product.purchase_lists.count + end + count + end + + # 物品の未配分を計算する + def unallocated_rental_items + rental_orders.preload(:rental_item).map do |rental_order| + { + "item": rental_order.rental_item.name, + "num": rental_order.num - assign_rental_items.map { |assign_rental_item| assign_rental_item.num }.sum + } + end + end end diff --git a/api/app/models/group_category.rb b/api/app/models/group_category.rb index 01606ce9a..d50958d5c 100644 --- a/api/app/models/group_category.rb +++ b/api/app/models/group_category.rb @@ -1,5 +1,5 @@ class GroupCategory < ApplicationRecord - has_many :groups - has_many :place_allow_lists - has_many :rental_item_allow_lists + has_many :groups + has_many :place_allow_lists + has_many :rental_item_allow_lists end diff --git a/api/app/models/place.rb b/api/app/models/place.rb index 58ba62a68..31681492b 100644 --- a/api/app/models/place.rb +++ b/api/app/models/place.rb @@ -1,21 +1,27 @@ class Place < ApplicationRecord - has_many :assign_group_places - has_many :place_allow_lists - has_many :place_numbers + has_many :assign_group_places + has_many :place_allow_lists + has_many :place_numbers - def to_name - return self.name - end + def to_name + name + end - # その会場の(開催年で絞り込んだ)参加団体(開催年で絞り込んだ)を取得する - def groups(fes_year_id) - return self.place_numbers.preload(:group_identification).map{ |place_number| place_number.group_identification.group if place_number.group_identification.group.fes_year_id == fes_year_id }.compact - end + # その会場の(開催年で絞り込んだ)参加団体(開催年で絞り込んだ)を取得する + def groups(fes_year_id) + place_numbers.preload(:group_identification).map do |place_number| + place_number.group_identification.group if place_number.group_identification.group.fes_year_id == fes_year_id + end.compact + end - # その会場で申請されている電力の総和を計算する - def sum_power_orders(fes_year_id) - sum_power_orders_by_place = 0 - sum_power_orders_by_place += self.place_numbers.preload(:group_identification).map{ |place_number| place_number.group_identification.group.sum_power_orders if place_number.group_identification.group.fes_year_id == fes_year_id }.compact.sum - return sum_power_orders_by_place - end + # その会場で申請されている電力の総和を計算する + def sum_power_orders(fes_year_id) + sum_power_orders_by_place = 0 + sum_power_orders_by_place += place_numbers.preload(:group_identification).map do |place_number| + if place_number.group_identification.group.fes_year_id == fes_year_id + place_number.group_identification.group.sum_power_orders + end + end.compact.sum + sum_power_orders_by_place + end end diff --git a/api/app/models/place_allow_list.rb b/api/app/models/place_allow_list.rb index 4d6d481a4..de57d3a4a 100644 --- a/api/app/models/place_allow_list.rb +++ b/api/app/models/place_allow_list.rb @@ -1,4 +1,4 @@ class PlaceAllowList < ApplicationRecord - belongs_to :place - belongs_to :group_category + belongs_to :place + belongs_to :group_category end diff --git a/api/app/models/place_order.rb b/api/app/models/place_order.rb index 591cfd94d..f71b37065 100644 --- a/api/app/models/place_order.rb +++ b/api/app/models/place_order.rb @@ -1,46 +1,42 @@ class PlaceOrder < ApplicationRecord - belongs_to :group - has_one :assign_group_place, dependent: :destroy + belongs_to :group + has_one :assign_group_place, dependent: :destroy - def self.get_with_groups - @record = PlaceOrder.preload(:group) - .map{ - |place_order| - { - "place_order": place_order, - "place_order_name": place_order.to_place_name_h, - "group": place_order.group - } - } - end - - def self.get_with_group(place_order_id) - place_order = PlaceOrder.find(place_order_id) - return { + def self.get_with_groups + @record = PlaceOrder.preload(:group) + .map do |place_order| + { "place_order": place_order, "place_order_name": place_order.to_place_name_h, - "group": place_order.group, + "group": place_order.group } end + end - # 会場申請を会場名のハッシュにして返す - def to_place_name_h - return { - "place_order": self.nil? ? nil : self, - "first": self.first.nil? ? nil : _place_name(self.first), - "second": self.second.nil? ? nil : _place_name(self.second), - "third": self.third.nil? ? nil : _place_name(self.third), - "remark": self.remark.nil? ? nil : self.remark - } - end + def self.get_with_group(place_order_id) + place_order = PlaceOrder.find(place_order_id) + { + "place_order": place_order, + "place_order_name": place_order.to_place_name_h, + "group": place_order.group + } + end - # 会場が存在するかを確認したのちnameを返す - def _place_name(place_id) - if Place.where(id: place_id).empty? - return nil - else - return Place.find(place_id).name - end - end + # 会場申請を会場名のハッシュにして返す + def to_place_name_h + { + "place_order": nil? ? nil : self, + "first": first.nil? ? nil : _place_name(first), + "second": second.nil? ? nil : _place_name(second), + "third": third.nil? ? nil : _place_name(third), + "remark": remark.nil? ? nil : remark + } + end + + # 会場が存在するかを確認したのちnameを返す + def _place_name(place_id) + return nil if Place.where(id: place_id).empty? + Place.find(place_id).name + end end diff --git a/api/app/models/power_order.rb b/api/app/models/power_order.rb index 14db214ec..537c84bba 100644 --- a/api/app/models/power_order.rb +++ b/api/app/models/power_order.rb @@ -1,33 +1,32 @@ class PowerOrder < ApplicationRecord - belongs_to :group + belongs_to :group - def self.with_groups - @record = PowerOrder.preload(:group) - .map{ - |power_order| - { - "power_order": power_order, - "group": power_order.group - } - } - end - - def self.with_group_and_place_order(power_order_id) - power_order = PowerOrder.find(power_order_id) - return { - power_order: power_order, - group: power_order.group, + def self.with_groups + @record = PowerOrder.preload(:group) + .map do |power_order| + { + "power_order": power_order, + "group": power_order.group } end + end - def to_info_h - return { - "id": self.id, - "item": self.item, - "power": self.power, - "manufacturer": self.manufacturer, - "model": self.model, - "item_url": self.item_url - } - end + def self.with_group_and_place_order(power_order_id) + power_order = PowerOrder.find(power_order_id) + { + power_order: power_order, + group: power_order.group + } + end + + def to_info_h + { + "id": id, + "item": item, + "power": power, + "manufacturer": manufacturer, + "model": model, + "item_url": item_url + } + end end diff --git a/api/app/models/public_relation.rb b/api/app/models/public_relation.rb index 692a69f88..bf040a47b 100644 --- a/api/app/models/public_relation.rb +++ b/api/app/models/public_relation.rb @@ -9,7 +9,7 @@ def to_info_h picture_path: picture_path, blurb: blurb, created_at: created_at, - updated_at: updated_at, + updated_at: updated_at } end end diff --git a/api/app/models/purchase_list.rb b/api/app/models/purchase_list.rb index d18780c5f..21067bd57 100644 --- a/api/app/models/purchase_list.rb +++ b/api/app/models/purchase_list.rb @@ -1,45 +1,44 @@ class PurchaseList < ApplicationRecord - belongs_to :fes_date - belongs_to :food_product - belongs_to :shop + belongs_to :fes_date + belongs_to :food_product + belongs_to :shop - def self.with_groups_and_info - @record = PurchaseList.preload(:food_product) - .map{ - |purchase_list| - { - "purchase_list": purchase_list, - "purchase_list_info": purchase_list.to_info_h, - "group": purchase_list.food_product.group - } - } - end - - def self.with_group_and_info(purchase_list_id) - purchase_list = PurchaseList.find(purchase_list_id) + def self.with_groups_and_info + @record = PurchaseList.preload(:food_product) + .map do |purchase_list| { "purchase_list": purchase_list, "purchase_list_info": purchase_list.to_info_h, "group": purchase_list.food_product.group } end + end - def to_info_h - return { - "id": self.id, - "items": self.items, - "is_fresh": self.is_fresh, - "food_product": self.food_product.name, - "food_product_id": self.food_product.id, - "shop": self.shop.name, - "shop_id": self.shop.id, - "days_num": self.fes_date.days_num, - "date": self.fes_date.date, - "date_id": self.fes_date.id, - "day": self.fes_date.day, - "year": self.fes_date.fes_year.year_num, - "purchase_date": self.purchase_date, - "url": self.url - } - end + def self.with_group_and_info(purchase_list_id) + purchase_list = PurchaseList.find(purchase_list_id) + { + "purchase_list": purchase_list, + "purchase_list_info": purchase_list.to_info_h, + "group": purchase_list.food_product.group + } + end + + def to_info_h + { + "id": id, + "items": items, + "is_fresh": is_fresh, + "food_product": food_product.name, + "food_product_id": food_product.id, + "shop": shop.name, + "shop_id": shop.id, + "days_num": fes_date.days_num, + "date": fes_date.date, + "date_id": fes_date.id, + "day": fes_date.day, + "year": fes_date.fes_year.year_num, + "purchase_date": purchase_date, + "url": url + } + end end diff --git a/api/app/models/rentable_item.rb b/api/app/models/rentable_item.rb index c5edbf9c0..a11e6fc52 100644 --- a/api/app/models/rentable_item.rb +++ b/api/app/models/rentable_item.rb @@ -1,4 +1,4 @@ class RentableItem < ApplicationRecord - belongs_to :stocker_place - belongs_to :stocker_item + belongs_to :stocker_place + belongs_to :stocker_item end diff --git a/api/app/models/rental_item.rb b/api/app/models/rental_item.rb index 415ab373d..ac1ea3939 100644 --- a/api/app/models/rental_item.rb +++ b/api/app/models/rental_item.rb @@ -1,13 +1,13 @@ class RentalItem < ApplicationRecord - has_many :rental_item_allow_lists - has_many :rental_orders - has_many :stocker_items - has_many :assign_rental_items + has_many :rental_item_allow_lists + has_many :rental_orders + has_many :stocker_items + has_many :assign_rental_items - def to_info_h - return { - "name": self.name, - "is_rentable": self.is_rentable - } - end + def to_info_h + { + "name": name, + "is_rentable": is_rentable + } + end end diff --git a/api/app/models/rental_item_allow_list.rb b/api/app/models/rental_item_allow_list.rb index 971a65b09..fdc3b1c0b 100644 --- a/api/app/models/rental_item_allow_list.rb +++ b/api/app/models/rental_item_allow_list.rb @@ -1,4 +1,4 @@ class RentalItemAllowList < ApplicationRecord - belongs_to :group_category - belongs_to :rental_item + belongs_to :group_category + belongs_to :rental_item end diff --git a/api/app/models/rental_order.rb b/api/app/models/rental_order.rb index 21417b9a8..6570e0be9 100644 --- a/api/app/models/rental_order.rb +++ b/api/app/models/rental_order.rb @@ -1,36 +1,35 @@ class RentalOrder < ApplicationRecord - belongs_to :group - belongs_to :rental_item + belongs_to :group + belongs_to :rental_item - def self.with_groups_and_rental_item - @record = RentalOrder.preload(:group) - .map{ - |rental_order| - { - "rental_order": rental_order, - "rental_item": rental_order.rental_item, - "group": rental_order.group - } - } - end - - def self.with_rental_item(rental_order_id) - rental_order = RentalOrder.find(rental_order_id) - return { + def self.with_groups_and_rental_item + @record = RentalOrder.preload(:group) + .map do |rental_order| + { "rental_order": rental_order, "rental_item": rental_order.rental_item, "group": rental_order.group } end + end - def to_rental_item_info_h - return { - "rental_item": self.nil? ? nil : self, - "name": self.rental_item.name, - "is_inside_shop_rentable": self.rental_item.is_inside_shop_rentable, - "is_outside_shop_rentable": self.rental_item.is_outside_shop_rentable, - "is_stage_rentable": self.rental_item.is_stage_rentable, - "num": self.num - } - end + def self.with_rental_item(rental_order_id) + rental_order = RentalOrder.find(rental_order_id) + { + "rental_order": rental_order, + "rental_item": rental_order.rental_item, + "group": rental_order.group + } + end + + def to_rental_item_info_h + { + "rental_item": nil? ? nil : self, + "name": rental_item.name, + "is_inside_shop_rentable": rental_item.is_inside_shop_rentable, + "is_outside_shop_rentable": rental_item.is_outside_shop_rentable, + "is_stage_rentable": rental_item.is_stage_rentable, + "num": num + } + end end diff --git a/api/app/models/shop.rb b/api/app/models/shop.rb index 4bcd802e1..e73903f6f 100644 --- a/api/app/models/shop.rb +++ b/api/app/models/shop.rb @@ -1,4 +1,3 @@ class Shop < ApplicationRecord - has_many :purchase_lists + has_many :purchase_lists end - diff --git a/api/app/models/stage.rb b/api/app/models/stage.rb index 575c55117..b7c33f3f1 100644 --- a/api/app/models/stage.rb +++ b/api/app/models/stage.rb @@ -1,9 +1,11 @@ class Stage < ApplicationRecord - has_many :assign_stages - has_many :stage_numbers + has_many :assign_stages + has_many :stage_numbers - # そのステージの参加団体を取得する - def groups - return self.stage_numbers.preload(:group_identification).map{ |stage_number| stage_number.group_identification.group } + # そのステージの参加団体を取得する + def groups + stage_numbers.preload(:group_identification).map do |stage_number| + stage_number.group_identification.group end + end end diff --git a/api/app/models/stage_common_option.rb b/api/app/models/stage_common_option.rb index dc4a2b076..495d5a193 100644 --- a/api/app/models/stage_common_option.rb +++ b/api/app/models/stage_common_option.rb @@ -3,30 +3,29 @@ class StageCommonOption < ApplicationRecord def self.with_groups @record = StageCommonOption.preload(:group) - .map{ - |stage_common_option| - { - "stage_common_option": stage_common_option, - "group": stage_common_option.group - } + .map do |stage_common_option| + { + "stage_common_option": stage_common_option, + "group": stage_common_option.group } + end end def self.with_group(stage_common_option_id) stage_common_option = StageCommonOption.find(stage_common_option_id) - return { + { "stage_common_option": stage_common_option, "group": stage_common_option.group } end def to_info_h - return { - "id": self.id, - "own_equipment": self.own_equipment, - "bgm": self.bgm, - "camera_permission": self.camera_permission, - "loud_sound": self.loud_sound + { + "id": id, + "own_equipment": own_equipment, + "bgm": bgm, + "camera_permission": camera_permission, + "loud_sound": loud_sound } end end diff --git a/api/app/models/stage_order.rb b/api/app/models/stage_order.rb index e103cc983..5d42e5b53 100644 --- a/api/app/models/stage_order.rb +++ b/api/app/models/stage_order.rb @@ -1,54 +1,51 @@ class StageOrder < ApplicationRecord - belongs_to :group - belongs_to :fes_date - has_one :assign_stage, dependent: :destroy + belongs_to :group + belongs_to :fes_date + has_one :assign_stage, dependent: :destroy - def self.with_groups - @record = StageOrder.preload(:group) - .map{ - |stage_order| - { - "stage_order": stage_order, - "stage_order_info": stage_order.to_info_h, - "group": stage_order.group - } - } - end - - def self.with_group(stage_order_id) - stage_order = StageOrder.find(stage_order_id) - return { + def self.with_groups + @record = StageOrder.preload(:group) + .map do |stage_order| + { "stage_order": stage_order, "stage_order_info": stage_order.to_info_h, "group": stage_order.group } end + end - def to_info_h - return { - "stage_order": self.nil? ? nil : self, - "is_sunny": self.is_sunny.nil? , - "year": self.fes_date.fes_year.year_num, - "date": self.fes_date.date, - "day": self.fes_date.day, - "day_num": self.fes_date.days_num, - "stage_first": self.stage_first.nil? ? nil : _stage_name(self.stage_first), - "stage_second": self.stage_second.nil? ? nil : _stage_name(self.stage_second), - "use_time_interval": self.use_time_interval, - "prepare_time_interval": self.prepare_time_interval, - "cleanup_time_interval": self.cleanup_time_interval, - "prepare_start_time": self.prepare_start_time, - "performance_start_time": self.performance_start_time, - "performance_end_time": self.performance_end_time, - "cleanup_end_time": self.cleanup_end_time - } - end + def self.with_group(stage_order_id) + stage_order = StageOrder.find(stage_order_id) + { + "stage_order": stage_order, + "stage_order_info": stage_order.to_info_h, + "group": stage_order.group + } + end - def _stage_name(stage_id) - if Stage.where(id: stage_id).empty? - return nil - else - return Stage.find(stage_id).name - end - end + def to_info_h + { + "stage_order": nil? ? nil : self, + "is_sunny": is_sunny.nil?, + "year": fes_date.fes_year.year_num, + "date": fes_date.date, + "day": fes_date.day, + "day_num": fes_date.days_num, + "stage_first": stage_first.nil? ? nil : _stage_name(stage_first), + "stage_second": stage_second.nil? ? nil : _stage_name(stage_second), + "use_time_interval": use_time_interval, + "prepare_time_interval": prepare_time_interval, + "cleanup_time_interval": cleanup_time_interval, + "prepare_start_time": prepare_start_time, + "performance_start_time": performance_start_time, + "performance_end_time": performance_end_time, + "cleanup_end_time": cleanup_end_time + } + end + + def _stage_name(stage_id) + return nil if Stage.where(id: stage_id).empty? + + Stage.find(stage_id).name + end end diff --git a/api/app/models/stocker_item.rb b/api/app/models/stocker_item.rb index e2b2e8403..ef026f032 100644 --- a/api/app/models/stocker_item.rb +++ b/api/app/models/stocker_item.rb @@ -1,36 +1,35 @@ class StockerItem < ApplicationRecord - belongs_to :rental_item - belongs_to :stocker_place - belongs_to :fes_year - has_one :rentable_item - - def self.with_rental_items - @record = StockerItem.preload(:rental_item) - .map{ - |stocker_item| - { - "stocker_item": stocker_item, - "rental_item": stocker_item.rental_item, - } - } - end - - def self.with_rental_item(stocker_item_id) - stocker_item = StockerItem.find(stocker_item_id) - return { - "stocker_item": stocker_item, - "rental_item": stocker_item.rental_item, - } - end + belongs_to :rental_item + belongs_to :stocker_place + belongs_to :fes_year + has_one :rentable_item - def to_rental_item_info_h - return { - "rental_item": self.nil? ? nil : self, - "name": self.rental_item.name, - "is_inside_shop_rentable": self.rental_item.is_inside_shop_rentable, - "is_outside_shop_rentable": self.rental_item.is_outside_shop_rentable, - "is_stage_rentable": self.rental_item.is_stage_rentable, - "num": self.num - } + def self.with_rental_items + @record = StockerItem.preload(:rental_item) + .map do |stocker_item| + { + "stocker_item": stocker_item, + "rental_item": stocker_item.rental_item + } end + end + + def self.with_rental_item(stocker_item_id) + stocker_item = StockerItem.find(stocker_item_id) + { + "stocker_item": stocker_item, + "rental_item": stocker_item.rental_item + } + end + + def to_rental_item_info_h + { + "rental_item": nil? ? nil : self, + "name": rental_item.name, + "is_inside_shop_rentable": rental_item.is_inside_shop_rentable, + "is_outside_shop_rentable": rental_item.is_outside_shop_rentable, + "is_stage_rentable": rental_item.is_stage_rentable, + "num": num + } + end end diff --git a/api/app/models/stocker_place.rb b/api/app/models/stocker_place.rb index efc302ed9..2b5283327 100644 --- a/api/app/models/stocker_place.rb +++ b/api/app/models/stocker_place.rb @@ -1,5 +1,5 @@ class StockerPlace < ApplicationRecord - has_many :stocker_items - has_many :rentable_items - has_many :assign_rental_items + has_many :stocker_items + has_many :rentable_items + has_many :assign_rental_items end diff --git a/api/app/models/sub_rep.rb b/api/app/models/sub_rep.rb index 10ddcde69..0ef6395a9 100644 --- a/api/app/models/sub_rep.rb +++ b/api/app/models/sub_rep.rb @@ -1,20 +1,20 @@ class SubRep < ApplicationRecord - belongs_to :group - belongs_to :department - belongs_to :grade + belongs_to :group + belongs_to :department + belongs_to :grade - # 副代表の情報の日本語をハッシュにして返す - def to_info_h - return { - "id": self.id, - "name": self.name, - "department": self.department.name, - "department_id": self.department.id, - "grade": self.grade.name, - "grade_id": self.grade.id, - "tel": self.tel, - "email": self.email, - "student_id": self.student_id - } - end + # 副代表の情報の日本語をハッシュにして返す + def to_info_h + { + "id": id, + "name": name, + "department": department.name, + "department_id": department.id, + "grade": grade.name, + "grade_id": grade.id, + "tel": tel, + "email": email, + "student_id": student_id + } + end end diff --git a/api/app/models/user.rb b/api/app/models/user.rb index cbb7d05ef..3222ec3e2 100644 --- a/api/app/models/user.rb +++ b/api/app/models/user.rb @@ -4,42 +4,40 @@ class User < ActiveRecord::Base # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :registerable, - :recoverable, :rememberable, :trackable, :validatable + :recoverable, :rememberable, :trackable, :validatable include DeviseTokenAuth::Concerns::User belongs_to :role has_one :user_detail, dependent: :destroy has_many :groups, dependent: :destroy has_many :memos - # sub_repがない場合はnilが入ったsub_repみたいなのを返す @@no_sub_rep = { - id: nil, - name: nil, - department_id: nil, - grade_id: nil, - tel: nil, - email: nil, - created_at: nil, - updated_at: nil, - student_id: nil - } + id: nil, + name: nil, + department_id: nil, + grade_id: nil, + tel: nil, + email: nil, + created_at: nil, + updated_at: nil, + student_id: nil + } def self.with_sub_reps @record = Group.preload(:user, :sub_rep) - .map{ - |group| - { - "user": group.user, - "group": group, - "sub_rep": group.sub_rep.nil? ? @@no_sub_rep : group.sub_rep - } + .map do |group| + { + "user": group.user, + "group": group, + "sub_rep": group.sub_rep.nil? ? @@no_sub_rep : group.sub_rep } + end end def self.with_sub_rep(group_id) group = Group.find(group_id) - return { + { "user": group.user, "group": group, "sub_rep": group.sub_rep.nil? ? @@no_sub_rep : group.sub_rep @@ -51,88 +49,96 @@ def self.with_sub_rep(group_id) # 全てのuserとそのuser_detailを取得する def self.with_user_details @records = User.preload(:role) - .map{ - |user| - { - "user": user, - "role": user.role, - # "user_detail": user.user_detail, - # "user_detail_info": user.user_detail.nil? ? nil : user.user_detail.to_info_h - } + .map do |user| + { + "user": user, + "role": user.role + # "user_detail": user.user_detail, + # "user_detail_info": user.user_detail.nil? ? nil : user.user_detail.to_info_h } + end end # 指定したIDのuserとそのuser_detailを取得する def self.with_user_detail(user_id) user = User.find(user_id) - return { - "user": user, + { + "user": user, "role": user.role, "user_detail": user.user_detail, "user_detail_info": user.user_detail.nil? ? nil : user.user_detail.to_info_h - } + } end def with_user_detail - return { + { "user": self, - "user_detail": self.user_detail.nil? ? nil : self.user_detail.to_info_h + "user_detail": user_detail.nil? ? nil : user_detail.to_info_h } end ### ユーザーが登録している情報の全てを取得する def with_regist_info - @groups = self.groups - @record = @groups.map{ - |group| - { + @groups = groups + @record = @groups.map do |group| + { "group": group, "group_category": group.group_category.nil? ? nil : group.group_category.name, "sub_rep": group.sub_rep.nil? ? nil : group.sub_rep.to_info_h, "place_order": group.place_order.nil? ? nil : group.place_order.to_place_name_h, - "stage_orders": group.stage_orders.count == 0 ? nil : group.stage_orders.map { - |stage_order| - { - "stage_order": stage_order.to_info_h - } - }, + "stage_orders": if group.stage_orders.count == 0 + nil + else + group.stage_orders.map do |stage_order| + { + "stage_order": stage_order.to_info_h + } + end + end, "stage_common_option": group.stage_common_option.nil? ? nil : group.stage_common_option.to_info_h, - "power_orders": group.power_orders.count == 0 ? nil : group.power_orders.map { - |power_order| - { - "power_order": power_order.to_info_h - } - }, - "rental_orders": group.rental_orders.count == 0 ? nil : group.rental_orders.map{ - |rental_order| - { - "rental_item": rental_order.to_rental_item_info_h, - } - }, - "employees": group.employees.count == 0 ? nil : group.employees.map{ - |employee| - { - "employee": employee.to_info_h - } - }, - "food_products": group.food_products.count == 0 ? nil : group.food_products.map{ - |food_product| - { - "food_product": food_product.to_info_h, - "purchase_lists": food_product.purchase_lists.map{ - |purchase_list| - { - "purchase_list": purchase_list.to_info_h - } - } - } - } + "power_orders": if group.power_orders.count == 0 + nil + else + group.power_orders.map do |power_order| + { + "power_order": power_order.to_info_h + } + end + end, + "rental_orders": if group.rental_orders.count == 0 + nil + else + group.rental_orders.map do |rental_order| + { + "rental_item": rental_order.to_rental_item_info_h + } + end + end, + "employees": if group.employees.count == 0 + nil + else + group.employees.map do |employee| + { + "employee": employee.to_info_h + } + end + end, + "food_products": if group.food_products.count == 0 + nil + else + group.food_products.map do |food_product| + { + "food_product": food_product.to_info_h, + "purchase_lists": food_product.purchase_lists.map do |purchase_list| + { + "purchase_list": purchase_list.to_info_h + } + end + } + end + end } - } - return @record + end + @record end - - private - - end diff --git a/api/app/models/user_detail.rb b/api/app/models/user_detail.rb index 397b87353..6153b249e 100644 --- a/api/app/models/user_detail.rb +++ b/api/app/models/user_detail.rb @@ -5,13 +5,13 @@ class UserDetail < ApplicationRecord # ユーザー詳細の情報の日本語をハッシュにして返す def to_info_h - return { - "student_id": self.student_id, - "department_id": self.department.id, - "department": self.department.name, - "grade_id": self.grade_id, - "grade": self.grade.name, - "tel": self.tel + { + "student_id": student_id, + "department_id": department.id, + "department": department.name, + "grade_id": grade_id, + "grade": grade.name, + "tel": tel } end end diff --git a/api/app/models/venue_map.rb b/api/app/models/venue_map.rb index 436125df2..a3f55fdfa 100644 --- a/api/app/models/venue_map.rb +++ b/api/app/models/venue_map.rb @@ -8,7 +8,7 @@ def to_info_h picture_name: picture_name, picture_path: picture_path, created_at: created_at, - updated_at: updated_at, + updated_at: updated_at } end end diff --git a/api/app/views/assign_group_places/index.json.jbuilder b/api/app/views/assign_group_places/index.json.jbuilder index f7a967319..f832673f2 100644 --- a/api/app/views/assign_group_places/index.json.jbuilder +++ b/api/app/views/assign_group_places/index.json.jbuilder @@ -1 +1 @@ -json.array! @assign_group_places, partial: "assign_group_places/assign_group_place", as: :assign_group_place +json.array! @assign_group_places, partial: 'assign_group_places/assign_group_place', as: :assign_group_place diff --git a/api/app/views/assign_group_places/show.json.jbuilder b/api/app/views/assign_group_places/show.json.jbuilder index 62583247e..5c976f9ea 100644 --- a/api/app/views/assign_group_places/show.json.jbuilder +++ b/api/app/views/assign_group_places/show.json.jbuilder @@ -1 +1 @@ -json.partial! "assign_group_places/assign_group_place", assign_group_place: @assign_group_place +json.partial! 'assign_group_places/assign_group_place', assign_group_place: @assign_group_place diff --git a/api/app/views/assign_rental_items/index.json.jbuilder b/api/app/views/assign_rental_items/index.json.jbuilder index b6398f4ae..4a16cd1df 100644 --- a/api/app/views/assign_rental_items/index.json.jbuilder +++ b/api/app/views/assign_rental_items/index.json.jbuilder @@ -1 +1 @@ -json.array! @assign_rental_items, partial: "assign_rental_items/assign_rental_item", as: :assign_rental_item +json.array! @assign_rental_items, partial: 'assign_rental_items/assign_rental_item', as: :assign_rental_item diff --git a/api/app/views/assign_rental_items/show.json.jbuilder b/api/app/views/assign_rental_items/show.json.jbuilder index 17fe83004..50a8772ce 100644 --- a/api/app/views/assign_rental_items/show.json.jbuilder +++ b/api/app/views/assign_rental_items/show.json.jbuilder @@ -1 +1 @@ -json.partial! "assign_rental_items/assign_rental_item", assign_rental_item: @assign_rental_item +json.partial! 'assign_rental_items/assign_rental_item', assign_rental_item: @assign_rental_item diff --git a/api/app/views/assign_stages/_assign_stage.json.jbuilder b/api/app/views/assign_stages/_assign_stage.json.jbuilder index e487f5e77..ac2d6fa90 100644 --- a/api/app/views/assign_stages/_assign_stage.json.jbuilder +++ b/api/app/views/assign_stages/_assign_stage.json.jbuilder @@ -1,2 +1,3 @@ -json.extract! assign_stage, :id, :stage_order_id, :stage_id, :time_point_start, :time_point_end, :created_at, :updated_at +json.extract! assign_stage, :id, :stage_order_id, :stage_id, :time_point_start, :time_point_end, :created_at, + :updated_at json.url assign_stage_url(assign_stage, format: :json) diff --git a/api/app/views/assign_stages/index.json.jbuilder b/api/app/views/assign_stages/index.json.jbuilder index b116cd0e3..ccc1f4fed 100644 --- a/api/app/views/assign_stages/index.json.jbuilder +++ b/api/app/views/assign_stages/index.json.jbuilder @@ -1 +1 @@ -json.array! @assign_stages, partial: "assign_stages/assign_stage", as: :assign_stage +json.array! @assign_stages, partial: 'assign_stages/assign_stage', as: :assign_stage diff --git a/api/app/views/assign_stages/show.json.jbuilder b/api/app/views/assign_stages/show.json.jbuilder index 7ef6de06e..b7984fbf6 100644 --- a/api/app/views/assign_stages/show.json.jbuilder +++ b/api/app/views/assign_stages/show.json.jbuilder @@ -1 +1 @@ -json.partial! "assign_stages/assign_stage", assign_stage: @assign_stage +json.partial! 'assign_stages/assign_stage', assign_stage: @assign_stage diff --git a/api/app/views/employees/index.json.jbuilder b/api/app/views/employees/index.json.jbuilder index b194793ee..2fdff7f20 100644 --- a/api/app/views/employees/index.json.jbuilder +++ b/api/app/views/employees/index.json.jbuilder @@ -1 +1 @@ -json.array! @employees, partial: "employees/employee", as: :employee +json.array! @employees, partial: 'employees/employee', as: :employee diff --git a/api/app/views/employees/show.json.jbuilder b/api/app/views/employees/show.json.jbuilder index a585012d5..a186f99f6 100644 --- a/api/app/views/employees/show.json.jbuilder +++ b/api/app/views/employees/show.json.jbuilder @@ -1 +1 @@ -json.partial! "employees/employee", employee: @employee +json.partial! 'employees/employee', employee: @employee diff --git a/api/app/views/food_products/_food_product.json.jbuilder b/api/app/views/food_products/_food_product.json.jbuilder index 8a40ceead..1af232ac7 100644 --- a/api/app/views/food_products/_food_product.json.jbuilder +++ b/api/app/views/food_products/_food_product.json.jbuilder @@ -1,2 +1,3 @@ -json.extract! food_product, :id, :group_id, :name, :is_cooking, :first_day_num, :second_day_num, :created_at, :updated_at +json.extract! food_product, :id, :group_id, :name, :is_cooking, :first_day_num, :second_day_num, :created_at, + :updated_at json.url food_product_url(food_product, format: :json) diff --git a/api/app/views/food_products/index.json.jbuilder b/api/app/views/food_products/index.json.jbuilder index c906af44b..c1d0d23f0 100644 --- a/api/app/views/food_products/index.json.jbuilder +++ b/api/app/views/food_products/index.json.jbuilder @@ -1 +1 @@ -json.array! @food_products, partial: "food_products/food_product", as: :food_product +json.array! @food_products, partial: 'food_products/food_product', as: :food_product diff --git a/api/app/views/food_products/show.json.jbuilder b/api/app/views/food_products/show.json.jbuilder index 366bfccb3..c1cd87b06 100644 --- a/api/app/views/food_products/show.json.jbuilder +++ b/api/app/views/food_products/show.json.jbuilder @@ -1 +1 @@ -json.partial! "food_products/food_product", food_product: @food_product +json.partial! 'food_products/food_product', food_product: @food_product diff --git a/api/app/views/groups/_group.json.jbuilder b/api/app/views/groups/_group.json.jbuilder index e2c75a570..daa880db7 100644 --- a/api/app/views/groups/_group.json.jbuilder +++ b/api/app/views/groups/_group.json.jbuilder @@ -1,2 +1,3 @@ -json.extract! group, :id, :name, :project_name, :activity, :user_id, :group_category_id, :fes_year_id, :created_at, :updated_at +json.extract! group, :id, :name, :project_name, :activity, :user_id, :group_category_id, :fes_year_id, :created_at, + :updated_at json.url group_url(group, format: :json) diff --git a/api/app/views/groups/index.json.jbuilder b/api/app/views/groups/index.json.jbuilder index 37cc18887..e4c65773d 100644 --- a/api/app/views/groups/index.json.jbuilder +++ b/api/app/views/groups/index.json.jbuilder @@ -1 +1 @@ -json.array! @groups, partial: "groups/group", as: :group +json.array! @groups, partial: 'groups/group', as: :group diff --git a/api/app/views/groups/show.json.jbuilder b/api/app/views/groups/show.json.jbuilder index 76d763822..476ed6e09 100644 --- a/api/app/views/groups/show.json.jbuilder +++ b/api/app/views/groups/show.json.jbuilder @@ -1 +1 @@ -json.partial! "groups/group", group: @group +json.partial! 'groups/group', group: @group diff --git a/api/app/views/memos/index.json.jbuilder b/api/app/views/memos/index.json.jbuilder index 197789742..4444aa012 100644 --- a/api/app/views/memos/index.json.jbuilder +++ b/api/app/views/memos/index.json.jbuilder @@ -1 +1 @@ -json.array! @memos, partial: "memos/memo", as: :memo +json.array! @memos, partial: 'memos/memo', as: :memo diff --git a/api/app/views/memos/show.json.jbuilder b/api/app/views/memos/show.json.jbuilder index c2f44deaa..6a94ff3b3 100644 --- a/api/app/views/memos/show.json.jbuilder +++ b/api/app/views/memos/show.json.jbuilder @@ -1 +1 @@ -json.partial! "memos/memo", memo: @memo +json.partial! 'memos/memo', memo: @memo diff --git a/api/app/views/news/index.json.jbuilder b/api/app/views/news/index.json.jbuilder index fcfd8d619..77af3be5d 100644 --- a/api/app/views/news/index.json.jbuilder +++ b/api/app/views/news/index.json.jbuilder @@ -1 +1 @@ -json.array! @news, partial: "news/news", as: :news +json.array! @news, partial: 'news/news', as: :news diff --git a/api/app/views/news/show.json.jbuilder b/api/app/views/news/show.json.jbuilder index ca34cff2e..f48781316 100644 --- a/api/app/views/news/show.json.jbuilder +++ b/api/app/views/news/show.json.jbuilder @@ -1 +1 @@ -json.partial! "news/news", news: @news +json.partial! 'news/news', news: @news diff --git a/api/app/views/place_allow_lists/index.json.jbuilder b/api/app/views/place_allow_lists/index.json.jbuilder index 779c2424e..19242bbc1 100644 --- a/api/app/views/place_allow_lists/index.json.jbuilder +++ b/api/app/views/place_allow_lists/index.json.jbuilder @@ -1 +1 @@ -json.array! @place_allow_lists, partial: "place_allow_lists/place_allow_list", as: :place_allow_list +json.array! @place_allow_lists, partial: 'place_allow_lists/place_allow_list', as: :place_allow_list diff --git a/api/app/views/place_allow_lists/show.json.jbuilder b/api/app/views/place_allow_lists/show.json.jbuilder index cd0d99fb1..139b0e5b4 100644 --- a/api/app/views/place_allow_lists/show.json.jbuilder +++ b/api/app/views/place_allow_lists/show.json.jbuilder @@ -1 +1 @@ -json.partial! "place_allow_lists/place_allow_list", place_allow_list: @place_allow_list +json.partial! 'place_allow_lists/place_allow_list', place_allow_list: @place_allow_list diff --git a/api/app/views/place_orders/index.json.jbuilder b/api/app/views/place_orders/index.json.jbuilder index 5b781b5f7..98a76ce1a 100644 --- a/api/app/views/place_orders/index.json.jbuilder +++ b/api/app/views/place_orders/index.json.jbuilder @@ -1 +1 @@ -json.array! @place_orders, partial: "place_orders/place_order", as: :place_order +json.array! @place_orders, partial: 'place_orders/place_order', as: :place_order diff --git a/api/app/views/place_orders/show.json.jbuilder b/api/app/views/place_orders/show.json.jbuilder index 5768c0aa2..1f3adfb10 100644 --- a/api/app/views/place_orders/show.json.jbuilder +++ b/api/app/views/place_orders/show.json.jbuilder @@ -1 +1 @@ -json.partial! "place_orders/place_order", place_order: @place_order +json.partial! 'place_orders/place_order', place_order: @place_order diff --git a/api/app/views/power_orders/index.json.jbuilder b/api/app/views/power_orders/index.json.jbuilder index 79eb5bf81..fc55b80bf 100644 --- a/api/app/views/power_orders/index.json.jbuilder +++ b/api/app/views/power_orders/index.json.jbuilder @@ -1 +1 @@ -json.array! @power_orders, partial: "power_orders/power_order", as: :power_order +json.array! @power_orders, partial: 'power_orders/power_order', as: :power_order diff --git a/api/app/views/power_orders/show.json.jbuilder b/api/app/views/power_orders/show.json.jbuilder index 88a7e2f7e..0c72bc229 100644 --- a/api/app/views/power_orders/show.json.jbuilder +++ b/api/app/views/power_orders/show.json.jbuilder @@ -1 +1 @@ -json.partial! "power_orders/power_order", power_order: @power_order +json.partial! 'power_orders/power_order', power_order: @power_order diff --git a/api/app/views/public_relations/index.json.jbuilder b/api/app/views/public_relations/index.json.jbuilder index 9e019c624..28a7f97b5 100644 --- a/api/app/views/public_relations/index.json.jbuilder +++ b/api/app/views/public_relations/index.json.jbuilder @@ -1 +1 @@ -json.array! @public_relations, partial: "public_relations/public_relation", as: :public_relation +json.array! @public_relations, partial: 'public_relations/public_relation', as: :public_relation diff --git a/api/app/views/public_relations/show.json.jbuilder b/api/app/views/public_relations/show.json.jbuilder index 3707eb184..e86707036 100644 --- a/api/app/views/public_relations/show.json.jbuilder +++ b/api/app/views/public_relations/show.json.jbuilder @@ -1 +1 @@ -json.partial! "public_relations/public_relation", public_relation: @public_relation +json.partial! 'public_relations/public_relation', public_relation: @public_relation diff --git a/api/app/views/purchase_lists/index.json.jbuilder b/api/app/views/purchase_lists/index.json.jbuilder index ce5ebbdf5..8e0b7f667 100644 --- a/api/app/views/purchase_lists/index.json.jbuilder +++ b/api/app/views/purchase_lists/index.json.jbuilder @@ -1 +1 @@ -json.array! @purchase_lists, partial: "purchase_lists/purchase_list", as: :purchase_list +json.array! @purchase_lists, partial: 'purchase_lists/purchase_list', as: :purchase_list diff --git a/api/app/views/purchase_lists/show.json.jbuilder b/api/app/views/purchase_lists/show.json.jbuilder index b1c5a540f..d8dd92353 100644 --- a/api/app/views/purchase_lists/show.json.jbuilder +++ b/api/app/views/purchase_lists/show.json.jbuilder @@ -1 +1 @@ -json.partial! "purchase_lists/purchase_list", purchase_list: @purchase_list +json.partial! 'purchase_lists/purchase_list', purchase_list: @purchase_list diff --git a/api/app/views/rentable_items/index.json.jbuilder b/api/app/views/rentable_items/index.json.jbuilder index aca200bda..4f00425cc 100644 --- a/api/app/views/rentable_items/index.json.jbuilder +++ b/api/app/views/rentable_items/index.json.jbuilder @@ -1 +1 @@ -json.array! @rentable_items, partial: "rentable_items/rentable_item", as: :rentable_item +json.array! @rentable_items, partial: 'rentable_items/rentable_item', as: :rentable_item diff --git a/api/app/views/rentable_items/show.json.jbuilder b/api/app/views/rentable_items/show.json.jbuilder index fb43a7be1..1ecf48c11 100644 --- a/api/app/views/rentable_items/show.json.jbuilder +++ b/api/app/views/rentable_items/show.json.jbuilder @@ -1 +1 @@ -json.partial! "rentable_items/rentable_item", rentable_item: @rentable_item +json.partial! 'rentable_items/rentable_item', rentable_item: @rentable_item diff --git a/api/app/views/rental_orders/index.json.jbuilder b/api/app/views/rental_orders/index.json.jbuilder index f8c24b935..cf6b0afe9 100644 --- a/api/app/views/rental_orders/index.json.jbuilder +++ b/api/app/views/rental_orders/index.json.jbuilder @@ -1 +1 @@ -json.array! @rental_orders, partial: "rental_orders/rental_order", as: :rental_order +json.array! @rental_orders, partial: 'rental_orders/rental_order', as: :rental_order diff --git a/api/app/views/rental_orders/show.json.jbuilder b/api/app/views/rental_orders/show.json.jbuilder index fdb759f1e..2c6d4895a 100644 --- a/api/app/views/rental_orders/show.json.jbuilder +++ b/api/app/views/rental_orders/show.json.jbuilder @@ -1 +1 @@ -json.partial! "rental_orders/rental_order", rental_order: @rental_order +json.partial! 'rental_orders/rental_order', rental_order: @rental_order diff --git a/api/app/views/stage_common_options/_stage_common_option.json.jbuilder b/api/app/views/stage_common_options/_stage_common_option.json.jbuilder index 0890bd22e..58550cd62 100644 --- a/api/app/views/stage_common_options/_stage_common_option.json.jbuilder +++ b/api/app/views/stage_common_options/_stage_common_option.json.jbuilder @@ -1,2 +1,3 @@ -json.extract! stage_common_option, :id, :group_id, :own_equipment, :bgm, :camera_permission, :loud_sound, :created_at, :updated_at +json.extract! stage_common_option, :id, :group_id, :own_equipment, :bgm, :camera_permission, :loud_sound, :created_at, + :updated_at json.url stage_common_option_url(stage_common_option, format: :json) diff --git a/api/app/views/stage_common_options/index.json.jbuilder b/api/app/views/stage_common_options/index.json.jbuilder index f81819ab0..0721f2b7d 100644 --- a/api/app/views/stage_common_options/index.json.jbuilder +++ b/api/app/views/stage_common_options/index.json.jbuilder @@ -1 +1 @@ -json.array! @stage_common_options, partial: "stage_common_options/stage_common_option", as: :stage_common_option +json.array! @stage_common_options, partial: 'stage_common_options/stage_common_option', as: :stage_common_option diff --git a/api/app/views/stage_common_options/show.json.jbuilder b/api/app/views/stage_common_options/show.json.jbuilder index a676d0af7..aeb246307 100644 --- a/api/app/views/stage_common_options/show.json.jbuilder +++ b/api/app/views/stage_common_options/show.json.jbuilder @@ -1 +1 @@ -json.partial! "stage_common_options/stage_common_option", stage_common_option: @stage_common_option +json.partial! 'stage_common_options/stage_common_option', stage_common_option: @stage_common_option diff --git a/api/app/views/stage_orders/_stage_order.json.jbuilder b/api/app/views/stage_orders/_stage_order.json.jbuilder index 2727545cf..f66f0e59f 100644 --- a/api/app/views/stage_orders/_stage_order.json.jbuilder +++ b/api/app/views/stage_orders/_stage_order.json.jbuilder @@ -1,2 +1,3 @@ -json.extract! stage_order, :id, :group_id, :is_sunny, :fes_date_id, :stage_first, :stage_second, :use_time_interval, :prepare_time_interval, :cleanup_time_interval, :prepare_start_time, :performance_start_time, :performance_end_time, :cleanup_end_time, :created_at, :updated_at +json.extract! stage_order, :id, :group_id, :is_sunny, :fes_date_id, :stage_first, :stage_second, :use_time_interval, + :prepare_time_interval, :cleanup_time_interval, :prepare_start_time, :performance_start_time, :performance_end_time, :cleanup_end_time, :created_at, :updated_at json.url stage_order_url(stage_order, format: :json) diff --git a/api/app/views/stage_orders/index.json.jbuilder b/api/app/views/stage_orders/index.json.jbuilder index 46b6ce915..715876ebb 100644 --- a/api/app/views/stage_orders/index.json.jbuilder +++ b/api/app/views/stage_orders/index.json.jbuilder @@ -1 +1 @@ -json.array! @stage_orders, partial: "stage_orders/stage_order", as: :stage_order +json.array! @stage_orders, partial: 'stage_orders/stage_order', as: :stage_order diff --git a/api/app/views/stage_orders/show.json.jbuilder b/api/app/views/stage_orders/show.json.jbuilder index a439a22f3..e97d6661e 100644 --- a/api/app/views/stage_orders/show.json.jbuilder +++ b/api/app/views/stage_orders/show.json.jbuilder @@ -1 +1 @@ -json.partial! "stage_orders/stage_order", stage_order: @stage_order +json.partial! 'stage_orders/stage_order', stage_order: @stage_order diff --git a/api/app/views/stocker_items/index.json.jbuilder b/api/app/views/stocker_items/index.json.jbuilder index 88e7c534d..e4a2e5beb 100644 --- a/api/app/views/stocker_items/index.json.jbuilder +++ b/api/app/views/stocker_items/index.json.jbuilder @@ -1 +1 @@ -json.array! @stocker_items, partial: "stocker_items/stocker_item", as: :stocker_item +json.array! @stocker_items, partial: 'stocker_items/stocker_item', as: :stocker_item diff --git a/api/app/views/stocker_items/show.json.jbuilder b/api/app/views/stocker_items/show.json.jbuilder index a901a8ebd..30d0fd5c6 100644 --- a/api/app/views/stocker_items/show.json.jbuilder +++ b/api/app/views/stocker_items/show.json.jbuilder @@ -1 +1 @@ -json.partial! "stocker_items/stocker_item", stocker_item: @stocker_item +json.partial! 'stocker_items/stocker_item', stocker_item: @stocker_item diff --git a/api/app/views/sub_reps/index.json.jbuilder b/api/app/views/sub_reps/index.json.jbuilder index 5e1b2034b..ae3713e38 100644 --- a/api/app/views/sub_reps/index.json.jbuilder +++ b/api/app/views/sub_reps/index.json.jbuilder @@ -1 +1 @@ -json.array! @sub_reps, partial: "sub_reps/sub_rep", as: :sub_rep +json.array! @sub_reps, partial: 'sub_reps/sub_rep', as: :sub_rep diff --git a/api/app/views/sub_reps/show.json.jbuilder b/api/app/views/sub_reps/show.json.jbuilder index 13ba720b3..c86682c05 100644 --- a/api/app/views/sub_reps/show.json.jbuilder +++ b/api/app/views/sub_reps/show.json.jbuilder @@ -1 +1 @@ -json.partial! "sub_reps/sub_rep", sub_rep: @sub_rep +json.partial! 'sub_reps/sub_rep', sub_rep: @sub_rep diff --git a/api/app/views/user_details/index.json.jbuilder b/api/app/views/user_details/index.json.jbuilder index caa192b57..a73ac4e46 100644 --- a/api/app/views/user_details/index.json.jbuilder +++ b/api/app/views/user_details/index.json.jbuilder @@ -1 +1 @@ -json.array! @user_details, partial: "user_details/user_detail", as: :user_detail +json.array! @user_details, partial: 'user_details/user_detail', as: :user_detail diff --git a/api/app/views/user_details/show.json.jbuilder b/api/app/views/user_details/show.json.jbuilder index 1d1d0d664..3713d551a 100644 --- a/api/app/views/user_details/show.json.jbuilder +++ b/api/app/views/user_details/show.json.jbuilder @@ -1 +1 @@ -json.partial! "user_details/user_detail", user_detail: @user_detail +json.partial! 'user_details/user_detail', user_detail: @user_detail diff --git a/api/app/views/user_page_settings/_user_page_setting.json.jbuilder b/api/app/views/user_page_settings/_user_page_setting.json.jbuilder index 8d7edf0a0..2e8eb765b 100644 --- a/api/app/views/user_page_settings/_user_page_setting.json.jbuilder +++ b/api/app/views/user_page_settings/_user_page_setting.json.jbuilder @@ -1,2 +1,3 @@ -json.extract! user_page_setting, :id, :is_regist_group, :is_regist_food_product, :is_edit_group, :is_edit_sub_rep, :is_edit_place, :is_edit_power_order, :is_edit_rental_order, :is_edit_stage_order, :is_edit_employee, :is_edit_food_product, :is_edit_purchase_list, :created_at, :updated_at +json.extract! user_page_setting, :id, :is_regist_group, :is_regist_food_product, :is_edit_group, :is_edit_sub_rep, + :is_edit_place, :is_edit_power_order, :is_edit_rental_order, :is_edit_stage_order, :is_edit_employee, :is_edit_food_product, :is_edit_purchase_list, :created_at, :updated_at json.url user_page_setting_url(user_page_setting, format: :json) diff --git a/api/app/views/user_page_settings/index.json.jbuilder b/api/app/views/user_page_settings/index.json.jbuilder index a2d96f8a5..4d921268a 100644 --- a/api/app/views/user_page_settings/index.json.jbuilder +++ b/api/app/views/user_page_settings/index.json.jbuilder @@ -1 +1 @@ -json.array! @user_page_settings, partial: "user_page_settings/user_page_setting", as: :user_page_setting +json.array! @user_page_settings, partial: 'user_page_settings/user_page_setting', as: :user_page_setting diff --git a/api/app/views/user_page_settings/show.json.jbuilder b/api/app/views/user_page_settings/show.json.jbuilder index 5153d68bf..795a96c98 100644 --- a/api/app/views/user_page_settings/show.json.jbuilder +++ b/api/app/views/user_page_settings/show.json.jbuilder @@ -1 +1 @@ -json.partial! "user_page_settings/user_page_setting", user_page_setting: @user_page_setting +json.partial! 'user_page_settings/user_page_setting', user_page_setting: @user_page_setting diff --git a/api/bin/bundle b/api/bin/bundle index a71368e32..b9a7b0f34 100755 --- a/api/bin/bundle +++ b/api/bin/bundle @@ -8,7 +8,7 @@ # this file is here to facilitate running it. # -require "rubygems" +require 'rubygems' m = Module.new do module_function @@ -18,36 +18,36 @@ m = Module.new do end def env_var_version - ENV["BUNDLER_VERSION"] + ENV['BUNDLER_VERSION'] end def cli_arg_version return unless invoked_as_script? # don't want to hijack other binstubs - return unless "update".start_with?(ARGV.first || " ") # must be running `bundle update` + return unless 'update'.start_with?(ARGV.first || ' ') # must be running `bundle update` + bundler_version = nil update_index = nil ARGV.each_with_index do |a, i| - if update_index && update_index.succ == i && a =~ Gem::Version::ANCHORED_VERSION_PATTERN - bundler_version = a - end + bundler_version = a if update_index && update_index.succ == i && a =~ Gem::Version::ANCHORED_VERSION_PATTERN next unless a =~ /\A--bundler(?:[= ](#{Gem::Version::VERSION_PATTERN}))?\z/ - bundler_version = $1 + + bundler_version = Regexp.last_match(1) update_index = i end bundler_version end def gemfile - gemfile = ENV["BUNDLE_GEMFILE"] + gemfile = ENV['BUNDLE_GEMFILE'] return gemfile if gemfile && !gemfile.empty? - File.expand_path("../../Gemfile", __FILE__) + File.expand_path('../Gemfile', __dir__) end def lockfile lockfile = case File.basename(gemfile) - when "gems.rb" then gemfile.sub(/\.rb$/, gemfile) + when 'gems.rb' then gemfile.sub(/\.rb$/, gemfile) else "#{gemfile}.lock" end File.expand_path(lockfile) @@ -55,15 +55,17 @@ m = Module.new do def lockfile_version return unless File.file?(lockfile) + lockfile_contents = File.read(lockfile) return unless lockfile_contents =~ /\n\nBUNDLED WITH\n\s{2,}(#{Gem::Version::VERSION_PATTERN})\n/ + Regexp.last_match(1) end def bundler_version @bundler_version ||= env_var_version || cli_arg_version || - lockfile_version + lockfile_version end def bundler_requirement @@ -73,28 +75,32 @@ m = Module.new do requirement = bundler_gem_version.approximate_recommendation - return requirement unless Gem::Version.new(Gem::VERSION) < Gem::Version.new("2.7.0") + return requirement unless Gem::Version.new(Gem::VERSION) < Gem::Version.new('2.7.0') - requirement += ".a" if bundler_gem_version.prerelease? + requirement += '.a' if bundler_gem_version.prerelease? requirement end def load_bundler! - ENV["BUNDLE_GEMFILE"] ||= gemfile + ENV['BUNDLE_GEMFILE'] ||= gemfile activate_bundler end def activate_bundler gem_error = activation_error_handling do - gem "bundler", bundler_requirement + gem 'bundler', bundler_requirement end return if gem_error.nil? + require_error = activation_error_handling do - require "bundler/version" + require 'bundler/version' + end + if require_error.nil? && Gem::Requirement.new(bundler_requirement).satisfied_by?(Gem::Version.new(Bundler::VERSION)) + return end - return if require_error.nil? && Gem::Requirement.new(bundler_requirement).satisfied_by?(Gem::Version.new(Bundler::VERSION)) + warn "Activating bundler (#{bundler_requirement}) failed:\n#{gem_error.message}\n\nTo install the version of bundler this project requires, run `gem install bundler -v '#{bundler_requirement}'`" exit 42 end @@ -109,6 +115,4 @@ end m.load_bundler! -if m.invoked_as_script? - load Gem.bin_path("bundler", "bundle") -end +load Gem.bin_path('bundler', 'bundle') if m.invoked_as_script? diff --git a/api/bin/rails b/api/bin/rails index 5badb2fde..7a8ff81e6 100755 --- a/api/bin/rails +++ b/api/bin/rails @@ -1,6 +1,6 @@ #!/usr/bin/env ruby begin - load File.expand_path('../spring', __FILE__) + load File.expand_path('spring', __dir__) rescue LoadError => e raise unless e.message.include?('spring') end diff --git a/api/bin/rake b/api/bin/rake index d87d5f578..0ba8c48cb 100755 --- a/api/bin/rake +++ b/api/bin/rake @@ -1,6 +1,6 @@ #!/usr/bin/env ruby begin - load File.expand_path('../spring', __FILE__) + load File.expand_path('spring', __dir__) rescue LoadError => e raise unless e.message.include?('spring') end diff --git a/api/config/application.rb b/api/config/application.rb index 2af41c25d..9beb9e925 100644 --- a/api/config/application.rb +++ b/api/config/application.rb @@ -1,19 +1,19 @@ require_relative 'boot' -require "rails" +require 'rails' # Pick the frameworks you want: -require "active_model/railtie" -require "active_job/railtie" -require "active_record/railtie" -require "active_storage/engine" -require "action_controller/railtie" -require "action_mailer/railtie" -require "action_mailbox/engine" -require "action_text/engine" -require "action_view/railtie" -require "action_cable/engine" +require 'active_model/railtie' +require 'active_job/railtie' +require 'active_record/railtie' +require 'active_storage/engine' +require 'action_controller/railtie' +require 'action_mailer/railtie' +require 'action_mailbox/engine' +require 'action_text/engine' +require 'action_view/railtie' +require 'action_cable/engine' # require "sprockets/railtie" -require "rails/test_unit/railtie" +require 'rails/test_unit/railtie' # Require the gems listed in Gemfile, including any gems # you've limited to :test, :development, or :production. diff --git a/api/config/environments/development.rb b/api/config/environments/development.rb index 618141e1e..019727665 100644 --- a/api/config/environments/development.rb +++ b/api/config/environments/development.rb @@ -42,7 +42,6 @@ # Highlight code that triggered database queries in logs. config.active_record.verbose_query_logs = true - # Raises error for missing translations. # config.action_view.raise_on_missing_translations = true diff --git a/api/config/environments/production.rb b/api/config/environments/production.rb index 0b9cf1d88..8883eaba8 100644 --- a/api/config/environments/production.rb +++ b/api/config/environments/production.rb @@ -11,7 +11,7 @@ config.eager_load = true # Full error reports are disabled and caching is turned on. - config.consider_all_requests_local = false + config.consider_all_requests_local = false # Ensures that a master key has been made available in either ENV["RAILS_MASTER_KEY"] # or in config/master.key. This key is used to decrypt credentials (and other encrypted files). @@ -44,7 +44,7 @@ config.log_level = :debug # Prepend all log lines with the following tags. - config.log_tags = [ :request_id ] + config.log_tags = [:request_id] # Use a different cache store in production. # config.cache_store = :mem_cache_store @@ -73,7 +73,7 @@ # require 'syslog/logger' # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name') - if ENV["RAILS_LOG_TO_STDOUT"].present? + if ENV['RAILS_LOG_TO_STDOUT'].present? logger = ActiveSupport::Logger.new(STDOUT) logger.formatter = config.log_formatter config.logger = ActiveSupport::TaggedLogging.new(logger) diff --git a/api/config/initializers/cors.rb b/api/config/initializers/cors.rb index f0ce653ec..826cfa02d 100644 --- a/api/config/initializers/cors.rb +++ b/api/config/initializers/cors.rb @@ -11,8 +11,8 @@ origins '*' resource '*', - headers: :any, - methods: [:get, :post, :put, :patch, :delete, :options, :head], - expose: ['access-token', 'client', 'uid'] + headers: :any, + methods: %i[get post put patch delete options head], + expose: %w[access-token client uid] end end diff --git a/api/config/initializers/devise_token_auth.rb b/api/config/initializers/devise_token_auth.rb index 2fc53dcf6..e1a59402d 100644 --- a/api/config/initializers/devise_token_auth.rb +++ b/api/config/initializers/devise_token_auth.rb @@ -42,11 +42,11 @@ # config.default_callbacks = true # Makes it possible to change the headers names - config.headers_names = {:'access-token' => 'access-token', - :'client' => 'client', - :'expiry' => 'expiry', - :'uid' => 'uid', - :'token-type' => 'token-type' } + config.headers_names = { 'access-token': 'access-token', + client: 'client', + expiry: 'expiry', + uid: 'uid', + 'token-type': 'token-type' } # By default, only Bearer Token authentication is implemented out of the box. # If, however, you wish to integrate with legacy Devise authentication, you can diff --git a/api/config/puma.rb b/api/config/puma.rb index 5ed443774..fd0293426 100644 --- a/api/config/puma.rb +++ b/api/config/puma.rb @@ -4,20 +4,20 @@ # the maximum value specified for Puma. Default is set to 5 threads for minimum # and maximum; this matches the default thread size of Active Record. # -max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 } -min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count } +max_threads_count = ENV.fetch('RAILS_MAX_THREADS') { 5 } +min_threads_count = ENV.fetch('RAILS_MIN_THREADS') { max_threads_count } threads min_threads_count, max_threads_count # Specifies the `port` that Puma will listen on to receive requests; default is 3000. # -port ENV.fetch("PORT") { 3000 } +port ENV.fetch('PORT') { 3000 } # Specifies the `environment` that Puma will run in. # -environment ENV.fetch("RAILS_ENV") { "development" } +environment ENV.fetch('RAILS_ENV') { 'development' } # Specifies the `pidfile` that Puma will use. -pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" } +pidfile ENV.fetch('PIDFILE') { 'tmp/pids/server.pid' } # Specifies the number of `workers` to boot in clustered mode. # Workers are forked web server processes. If using threads and workers together diff --git a/api/config/routes.rb b/api/config/routes.rb index 39a6874ca..b2946b104 100644 --- a/api/config/routes.rb +++ b/api/config/routes.rb @@ -1,41 +1,40 @@ Rails.application.routes.draw do - # 識別番号割り当て - get 'group_identification' => "group_identification#index" - post 'group_identification' => "group_identification#create" - put 'group_identification/:id' => "group_identification#update" - delete 'group_identification/:id' => "group_identification#destroy" + get 'group_identification' => 'group_identification#index' + post 'group_identification' => 'group_identification#create' + put 'group_identification/:id' => 'group_identification#update' + delete 'group_identification/:id' => 'group_identification#destroy' # 会場割り当て機能 - get 'place_numbers' => "place_number#index" - post 'place_numbers' => "place_number#create" - put 'place_numbers/:id' => "place_number#update" - delete 'place_numbers/:id' => "place_number#destroy" + get 'place_numbers' => 'place_number#index' + post 'place_numbers' => 'place_number#create' + put 'place_numbers/:id' => 'place_number#update' + delete 'place_numbers/:id' => 'place_number#destroy' # ステージ割り当て機能 - get 'stage_numbers' => "stage_number#index" - post 'stage_numbers' => "stage_number#create" - put 'stage_numbers/:id' => "stage_number#update" - delete 'stage_numbers/:id' => "stage_number#destroy" + get 'stage_numbers' => 'stage_number#index' + post 'stage_numbers' => 'stage_number#create' + put 'stage_numbers/:id' => 'stage_number#update' + delete 'stage_numbers/:id' => 'stage_number#destroy' # users - get "/users" => "users#index" - get "/users/:id" => "users#show" - get "/current_user" => "users#get_current_user" - put "/users/:id" => "users#update" - delete "/users/:id" => "users#destroy" - post "/users/simply_user_create" => "users#simply_user_create" + get '/users' => 'users#index' + get '/users/:id' => 'users#show' + get '/current_user' => 'users#get_current_user' + put '/users/:id' => 'users#update' + delete '/users/:id' => 'users#destroy' + post '/users/simply_user_create' => 'users#simply_user_create' # ステージ - get "/sunny/stages" => "stages#show_sunny" - get "/rainy/stages" => "stages#show_rainy" + get '/sunny/stages' => 'stages#show_sunny' + get '/rainy/stages' => 'stages#show_rainy' # CRUD (/...) resources :user_page_settings resources :memos resources :news resources :purchase_lists - post "/purchase_lists" => "purchase_lists#create" + post '/purchase_lists' => 'purchase_lists#create' resources :food_products resources :assign_rental_items resources :rentable_items @@ -74,193 +73,193 @@ #---管理者画面用--- #---物品割当 - post "get_refinement_stocker_item" => "assign_rental_items_api#get_refinement_stocker_item" - post "get_refinement_assign_rental_item" => "assign_rental_items_api#get_refinement_assign_rental_item" + post 'get_refinement_stocker_item' => 'assign_rental_items_api#get_refinement_stocker_item' + post 'get_refinement_assign_rental_item' => 'assign_rental_items_api#get_refinement_assign_rental_item' #---ユーザー一覧ページ - get "get_user_index_for_admin_view" => "users#get_user_index_for_admin_view" - get "get_user_show_for_admin_view/:id" => "users#get_user_show_for_admin_view" - get "users/show" => "users#show" + get 'get_user_index_for_admin_view' => 'users#get_user_index_for_admin_view' + get 'get_user_show_for_admin_view/:id' => 'users#get_user_show_for_admin_view' + get 'users/show' => 'users#show' #---代表者一覧ページ - get "get_representative_index_for_admin_view" => "users#get_representative_index_for_admin_view" - get "get_representative_show_for_admin_view/:id" => "users#get_representative_show_for_admin_view" - post "get_refinement_representatives" => "representatives_api#get_refinement_represantatives" - post "get_search_representatives" => "representatives_api#get_search_representatives" - #(副代表の検索) - post "get_search_sub_reps" => "sub_rep_api#get_search_sub_reps" + get 'get_representative_index_for_admin_view' => 'users#get_representative_index_for_admin_view' + get 'get_representative_show_for_admin_view/:id' => 'users#get_representative_show_for_admin_view' + post 'get_refinement_representatives' => 'representatives_api#get_refinement_represantatives' + post 'get_search_representatives' => 'representatives_api#get_search_representatives' + # (副代表の検索) + post 'get_search_sub_reps' => 'sub_rep_api#get_search_sub_reps' #---参加団体申請ページ - get "get_group_index_for_admin_view" => "groups_api#get_group_index_for_admin_view" - get "get_group_show_for_admin_view/:id" => "groups_api#get_group_show_for_admin_view" - get "get_group_for_admin_view/:id" => "groups_api#get_group_for_admin_view" - post "get_refinement_groups" => "groups_api#get_refinement_groups" - post "get_search_groups" => "groups_api#get_search_groups" - get "get_groups_refinemented_by_current_fes_year" => "groups_api#get_groups_refinemented_by_current_fes_year" + get 'get_group_index_for_admin_view' => 'groups_api#get_group_index_for_admin_view' + get 'get_group_show_for_admin_view/:id' => 'groups_api#get_group_show_for_admin_view' + get 'get_group_for_admin_view/:id' => 'groups_api#get_group_for_admin_view' + post 'get_refinement_groups' => 'groups_api#get_refinement_groups' + post 'get_search_groups' => 'groups_api#get_search_groups' + get 'get_groups_refinemented_by_current_fes_year' => 'groups_api#get_groups_refinemented_by_current_fes_year' #---電力申請ページ - get "get_power_order_index_for_admin_view" => "power_orders_api#get_power_order_index_for_admin_view" - get "get_power_order_show_for_admin_view/:id" => "power_orders_api#get_power_order_show_for_admin_view" - post "get_refinement_power_orders" => "power_orders_api#get_refinement_power_orders" - post "get_search_power_orders" => "power_orders_api#get_search_power_orders" + get 'get_power_order_index_for_admin_view' => 'power_orders_api#get_power_order_index_for_admin_view' + get 'get_power_order_show_for_admin_view/:id' => 'power_orders_api#get_power_order_show_for_admin_view' + post 'get_refinement_power_orders' => 'power_orders_api#get_refinement_power_orders' + post 'get_search_power_orders' => 'power_orders_api#get_search_power_orders' #---会場申請ページ - get "get_place_order_index_for_admin_view" => "place_orders_api#get_place_order_index_for_admin_view" - get "get_place_order_show_for_admin_view/:id" => "place_orders_api#get_place_order_show_for_admin_view" - post "get_refinement_place_orders" => "place_orders_api#get_refinement_place_orders" - post "get_search_place_orders" => "place_orders_api#get_search_place_orders" + get 'get_place_order_index_for_admin_view' => 'place_orders_api#get_place_order_index_for_admin_view' + get 'get_place_order_show_for_admin_view/:id' => 'place_orders_api#get_place_order_show_for_admin_view' + post 'get_refinement_place_orders' => 'place_orders_api#get_refinement_place_orders' + post 'get_search_place_orders' => 'place_orders_api#get_search_place_orders' #---物品申請ページ - get "get_rental_order_index_for_admin_view" => "rental_orders_api#get_rental_order_index_for_admin_view" - get "get_rental_order_show_for_admin_view/:id" => "rental_orders_api#get_rental_order_show_for_admin_view" - post "get_refinement_rental_orders" => "rental_orders_api#get_refinement_rental_orders" - post "get_search_rental_orders" => "rental_orders_api#get_search_rental_orders" + get 'get_rental_order_index_for_admin_view' => 'rental_orders_api#get_rental_order_index_for_admin_view' + get 'get_rental_order_show_for_admin_view/:id' => 'rental_orders_api#get_rental_order_show_for_admin_view' + post 'get_refinement_rental_orders' => 'rental_orders_api#get_refinement_rental_orders' + post 'get_search_rental_orders' => 'rental_orders_api#get_search_rental_orders' #---ステージ申請ページ - get "get_stage_order_index_for_admin_view" => "stage_orders_api#get_stage_order_index_for_admin_view" - get "get_stage_order_show_for_admin_view/:id" => "stage_orders_api#get_stage_order_show_for_admin_view" - post "get_refinement_stage_orders" => "stage_orders_api#get_refinement_stage_orders" - post "get_search_stage_orders" => "stage_orders_api#get_search_stage_orders" + get 'get_stage_order_index_for_admin_view' => 'stage_orders_api#get_stage_order_index_for_admin_view' + get 'get_stage_order_show_for_admin_view/:id' => 'stage_orders_api#get_stage_order_show_for_admin_view' + post 'get_refinement_stage_orders' => 'stage_orders_api#get_refinement_stage_orders' + post 'get_search_stage_orders' => 'stage_orders_api#get_search_stage_orders' #---ステージオプション申請ページ - get "get_stage_common_option_index_for_admin_view" => "stage_common_options_api#get_stage_common_option_index_for_admin_view" - get "get_stage_common_option_show_for_admin_view/:id" => "stage_common_options_api#get_stage_common_option_show_for_admin_view" - post "get_refinement_stage_common_options" => "stage_common_options_api#get_refinement_stage_common_options" - post "get_search_stage_common_options" => "stage_common_options_api#get_search_stage_common_options" + get 'get_stage_common_option_index_for_admin_view' => 'stage_common_options_api#get_stage_common_option_index_for_admin_view' + get 'get_stage_common_option_show_for_admin_view/:id' => 'stage_common_options_api#get_stage_common_option_show_for_admin_view' + post 'get_refinement_stage_common_options' => 'stage_common_options_api#get_refinement_stage_common_options' + post 'get_search_stage_common_options' => 'stage_common_options_api#get_search_stage_common_options' #---従業員申請ページ - get "get_employee_index_for_admin_view" => "employees_api#get_employee_index_for_admin_view" - get "get_employee_show_for_admin_view/:id" => "employees_api#get_employee_show_for_admin_view" - post "get_refinement_employees" => "employees_api#get_refinement_employees" - post "get_search_employees" => "employees_api#get_search_employees" + get 'get_employee_index_for_admin_view' => 'employees_api#get_employee_index_for_admin_view' + get 'get_employee_show_for_admin_view/:id' => 'employees_api#get_employee_show_for_admin_view' + post 'get_refinement_employees' => 'employees_api#get_refinement_employees' + post 'get_search_employees' => 'employees_api#get_search_employees' #---販売品申請ページ - get "get_food_product_index_for_admin_view" => "food_products_api#get_food_product_index_for_admin_view" - get "get_food_product_show_for_admin_view/:id" => "food_products_api#get_food_product_show_for_admin_view" - post "get_refinement_food_products" => "food_products_api#get_refinement_food_products" - post "get_search_food_products" => "food_products_api#get_search_food_products" - get "get_food_products_by_group_id/:group_id" => "food_products_api#get_food_products_by_group_id" + get 'get_food_product_index_for_admin_view' => 'food_products_api#get_food_product_index_for_admin_view' + get 'get_food_product_show_for_admin_view/:id' => 'food_products_api#get_food_product_show_for_admin_view' + post 'get_refinement_food_products' => 'food_products_api#get_refinement_food_products' + post 'get_search_food_products' => 'food_products_api#get_search_food_products' + get 'get_food_products_by_group_id/:group_id' => 'food_products_api#get_food_products_by_group_id' #---購入品申請ページ - get "get_purchase_list_index_for_admin_view" => "purchase_lists_api#get_purchase_list_index_for_admin_view" - get "get_purchase_list_show_for_admin_view/:id" => "purchase_lists_api#get_purchase_list_show_for_admin_view" - post "get_refinement_purchase_lists" => "purchase_lists_api#get_refinement_purchase_lists" - post "get_search_purchase_lists" => "purchase_lists_api#get_search_purchase_lists" + get 'get_purchase_list_index_for_admin_view' => 'purchase_lists_api#get_purchase_list_index_for_admin_view' + get 'get_purchase_list_show_for_admin_view/:id' => 'purchase_lists_api#get_purchase_list_show_for_admin_view' + post 'get_refinement_purchase_lists' => 'purchase_lists_api#get_refinement_purchase_lists' + post 'get_search_purchase_lists' => 'purchase_lists_api#get_search_purchase_lists' #---PR画像・文申請ページ - get "get_public_relation_for_admin_view/:id" => "public_relations_api#get_public_relation_for_admin_view" - post "get_refinement_public_relations" => "public_relations_api#get_refinement_public_relations" - post "get_search_public_relations" => "public_relations_api#get_search_public_relations" - get "get_groups_have_no_public_relation" => "groups_api#get_groups_have_no_public_relation" + get 'get_public_relation_for_admin_view/:id' => 'public_relations_api#get_public_relation_for_admin_view' + post 'get_refinement_public_relations' => 'public_relations_api#get_refinement_public_relations' + post 'get_search_public_relations' => 'public_relations_api#get_search_public_relations' + get 'get_groups_have_no_public_relation' => 'groups_api#get_groups_have_no_public_relation' #---模擬店平面図申請ページ - get "get_venue_map_for_admin_view/:id" => "venue_maps_api#get_venue_map_for_admin_view" - post "get_refinement_venue_maps" => "venue_maps_api#get_refinement_venue_maps" - post "get_search_venue_maps" => "venue_maps_api#get_search_venue_maps" - get "get_groups_have_no_venue_map" => "groups_api#get_groups_have_no_venue_map" + get 'get_venue_map_for_admin_view/:id' => 'venue_maps_api#get_venue_map_for_admin_view' + post 'get_refinement_venue_maps' => 'venue_maps_api#get_refinement_venue_maps' + post 'get_search_venue_maps' => 'venue_maps_api#get_search_venue_maps' + get 'get_groups_have_no_venue_map' => 'groups_api#get_groups_have_no_venue_map' #---会場アナウンス文申請 - get "get_announcement_index_for_admin_view" => "announcements_api#get_announcement_index_for_admin_view" - get "get_announcement_show_for_admin_view/:id" => "announcements_api#get_announcement_show_for_admin_view" - get "get_announcement_for_admin_view/:id" => "announcements_api#get_announcement_for_admin_view" - post "get_refinement_announcements" => "announcements_api#get_refinement_announcements" - post "get_search_announcements" => "announcements_api#get_search_announcements" - get "get_groups_have_no_announcement" => "groups_api#get_groups_have_no_announcement" + get 'get_announcement_index_for_admin_view' => 'announcements_api#get_announcement_index_for_admin_view' + get 'get_announcement_show_for_admin_view/:id' => 'announcements_api#get_announcement_show_for_admin_view' + get 'get_announcement_for_admin_view/:id' => 'announcements_api#get_announcement_for_admin_view' + post 'get_refinement_announcements' => 'announcements_api#get_refinement_announcements' + post 'get_search_announcements' => 'announcements_api#get_search_announcements' + get 'get_groups_have_no_announcement' => 'groups_api#get_groups_have_no_announcement' #---調理工程表申請 - get "get_cooking_process_order_for_admin_view/:id" => "cooking_process_orders_api#get_cooking_process_order_for_admin_view" - post "get_refinement_cooking_process_orders" => "cooking_process_orders_api#get_refinement_cooking_process_orders" - post "get_search_cooking_process_orders" => "cooking_process_orders_api#get_search_cooking_process_orders" - get "get_groups_have_no_cooking_process_order" => "groups_api#get_groups_have_no_cooking_process_order" + get 'get_cooking_process_order_for_admin_view/:id' => 'cooking_process_orders_api#get_cooking_process_order_for_admin_view' + post 'get_refinement_cooking_process_orders' => 'cooking_process_orders_api#get_refinement_cooking_process_orders' + post 'get_search_cooking_process_orders' => 'cooking_process_orders_api#get_search_cooking_process_orders' + get 'get_groups_have_no_cooking_process_order' => 'groups_api#get_groups_have_no_cooking_process_order' #---実行委員担当者申請ページ - get "get_contact_person_index_for_admin_view" => "contact_persons_api#get_contact_person_index_for_admin_view" - get "get_contact_person_show_for_admin_view/:id" => "contact_persons_api#get_contact_person_show_for_admin_view" - post "get_refinement_contact_persons" => "contact_persons_api#get_refinement_contact_persons" - post "get_search_contact_persons" => "contact_persons_api#get_search_contact_persons" + get 'get_contact_person_index_for_admin_view' => 'contact_persons_api#get_contact_person_index_for_admin_view' + get 'get_contact_person_show_for_admin_view/:id' => 'contact_persons_api#get_contact_person_show_for_admin_view' + post 'get_refinement_contact_persons' => 'contact_persons_api#get_refinement_contact_persons' + post 'get_search_contact_persons' => 'contact_persons_api#get_search_contact_persons' #---申請情報ページ - get "get_order_info_for_admin_view/:id" => "order_infos_api#get_order_info_for_admin_view" - post "get_refinement_order_infos" => "order_infos_api#get_refinement_order_infos" - post "get_search_order_infos" => "order_infos_api#get_search_order_infos" + get 'get_order_info_for_admin_view/:id' => 'order_infos_api#get_order_info_for_admin_view' + post 'get_refinement_order_infos' => 'order_infos_api#get_refinement_order_infos' + post 'get_search_order_infos' => 'order_infos_api#get_search_order_infos' #---申請状況一覧 - get "get_order_status_check_for_admin_view/:id" => "order_status_check_api#get_order_status_check_for_admin_view" - post "get_refinement_order_status_check" => "order_status_check_api#get_refinement_order_status_check" - post "get_search_order_status_check" => "order_status_check_api#get_search_order_status_check" + get 'get_order_status_check_for_admin_view/:id' => 'order_status_check_api#get_order_status_check_for_admin_view' + post 'get_refinement_order_status_check' => 'order_status_check_api#get_refinement_order_status_check' + post 'get_search_order_status_check' => 'order_status_check_api#get_search_order_status_check' #---開催日 - get "get_refinement_fes_date_by_fes_year/:fes_year_id" => "fes_dates_api#get_refinement_fes_date_by_fes_year" - get "get_current_fes_dates" => "fes_dates_api#get_current_fes_dates" + get 'get_refinement_fes_date_by_fes_year/:fes_year_id' => 'fes_dates_api#get_refinement_fes_date_by_fes_year' + get 'get_current_fes_dates' => 'fes_dates_api#get_current_fes_dates' #---貸出物品 - get "get_rentable_items" => "rental_items_api#get_rentable_items" - get "get_shop_rentable_items" => "rental_items_api#get_shop_rentable_items" - get "get_all_rentable_items" => "rental_items_api#get_all_rentable_items" - get "get_inside_shop_rentable_items" => "rental_items_api#get_inside_shop_rentable_items" - get "get_outside_shop_rentable_items" => "rental_items_api#get_outside_shop_rentable_items" - get "get_stage_rentable_items" => "rental_items_api#get_stage_rentable_items" + get 'get_rentable_items' => 'rental_items_api#get_rentable_items' + get 'get_shop_rentable_items' => 'rental_items_api#get_shop_rentable_items' + get 'get_all_rentable_items' => 'rental_items_api#get_all_rentable_items' + get 'get_inside_shop_rentable_items' => 'rental_items_api#get_inside_shop_rentable_items' + get 'get_outside_shop_rentable_items' => 'rental_items_api#get_outside_shop_rentable_items' + get 'get_stage_rentable_items' => 'rental_items_api#get_stage_rentable_items' #---CSV出力 - get "get_groups_csv/:fes_year_id" => "output_csv#output_groups_csv" - get "get_sub_reps_csv/:fes_year_id" => "output_csv#output_sub_reps_csv" - get "get_rental_orders_csv/:fes_year_id" => "output_csv#output_rental_orders_csv" - get "get_power_orders_csv/:fes_year_id" => "output_csv#output_power_orders_csv" - get "get_place_orders_csv/:fes_year_id" => "output_csv#output_place_orders_csv" - get "get_stage_orders_csv/:fes_year_id" => "output_csv#output_stage_orders_csv" - get "get_stage_common_options_csv/:fes_year_id" => "output_csv#output_stage_common_options_csv" - get "get_employees_csv/:fes_year_id" => "output_csv#output_employees_csv" - get "get_food_products_csv/:fes_year_id" => "output_csv#output_food_products_csv" - get "get_purchase_lists_csv/:fes_year_id" => "output_csv#output_purchase_lists_csv" - get "get_users_csv/:fes_year_id" => "output_csv#output_users_csv" - get "get_assign_rental_items_csv/:fes_year_id" => "output_csv#output_assign_rental_items_csv" - get "get_announcements_csv" => "output_csv#output_announcements_csv" - get "get_cooking_process_orders_csv" => "output_csv#output_cooking_process_orders_csv" - get "get_public_relations_csv/:fes_year_id" => "output_csv#output_public_relations_csv" + get 'get_groups_csv/:fes_year_id' => 'output_csv#output_groups_csv' + get 'get_sub_reps_csv/:fes_year_id' => 'output_csv#output_sub_reps_csv' + get 'get_rental_orders_csv/:fes_year_id' => 'output_csv#output_rental_orders_csv' + get 'get_power_orders_csv/:fes_year_id' => 'output_csv#output_power_orders_csv' + get 'get_place_orders_csv/:fes_year_id' => 'output_csv#output_place_orders_csv' + get 'get_stage_orders_csv/:fes_year_id' => 'output_csv#output_stage_orders_csv' + get 'get_stage_common_options_csv/:fes_year_id' => 'output_csv#output_stage_common_options_csv' + get 'get_employees_csv/:fes_year_id' => 'output_csv#output_employees_csv' + get 'get_food_products_csv/:fes_year_id' => 'output_csv#output_food_products_csv' + get 'get_purchase_lists_csv/:fes_year_id' => 'output_csv#output_purchase_lists_csv' + get 'get_users_csv/:fes_year_id' => 'output_csv#output_users_csv' + get 'get_assign_rental_items_csv/:fes_year_id' => 'output_csv#output_assign_rental_items_csv' + get 'get_announcements_csv' => 'output_csv#output_announcements_csv' + get 'get_cooking_process_orders_csv' => 'output_csv#output_cooking_process_orders_csv' + get 'get_public_relations_csv/:fes_year_id' => 'output_csv#output_public_relations_csv' # ダッシュボード - get "dashboard" => "dashboard_api#get_dashboard_info" + get 'dashboard' => 'dashboard_api#get_dashboard_info' # ユーザー周りのAPI - get "update_user/:id/:role_id" => "users#update" - post "users/edit_user_info" => "users#edit_user_info" - post "users/reset_password" => "users#reset_password" - post "get_refinement_users" => "users#get_refinement_users" - post "get_search_users" => "users#get_search_users" - get "users/get_user_detail" => "users#get_user_detail" + get 'update_user/:id/:role_id' => 'users#update' + post 'users/edit_user_info' => 'users#edit_user_info' + post 'users/reset_password' => 'users#reset_password' + post 'get_refinement_users' => 'users#get_refinement_users' + post 'get_search_users' => 'users#get_search_users' + get 'users/get_user_detail' => 'users#get_user_detail' # 現在のユーザーについて - get "current_user" => "current_user_api#get_current_user_with_user_detail" - get "current_user/groups" => "current_user_api#get_groups" - get "current_user/groups/places" => "current_user_api#get_groups_place_allow_list" - get "current_user/regist_info" => "current_user_api#get_regist_info" - get "current_user/is_login" => "current_user_api#is_login" + get 'current_user' => 'current_user_api#get_current_user_with_user_detail' + get 'current_user/groups' => 'current_user_api#get_groups' + get 'current_user/groups/places' => 'current_user_api#get_groups_place_allow_list' + get 'current_user/regist_info' => 'current_user_api#get_regist_info' + get 'current_user/is_login' => 'current_user_api#is_login' ### TODO: フロントが整備されたらこのAPIを/current_user/regist_infoにして既存のものを消す - get "current_user/current_regist_info" => "current_user_api#current_regist_info" + get 'current_user/current_regist_info' => 'current_user_api#current_regist_info' ### - get "current_user/get_user_detail_raw" => "current_user_api#get_user_detail_raw" - post "current_user/edit_user_info" => "current_user_api#edit_user_info" - post "current_user/password_reset" => "current_user_api#password_reset" + get 'current_user/get_user_detail_raw' => 'current_user_api#get_user_detail_raw' + post 'current_user/edit_user_info' => 'current_user_api#edit_user_info' + post 'current_user/password_reset' => 'current_user_api#password_reset' # --- 新規ユーザー周りのAPI --- - get "get_user_with_user_details" => "users_api#get_user_with_user_details" - get "get_user_with_user_detail" => "user_api#get_user_with_user_detail" + get 'get_user_with_user_details' => 'users_api#get_user_with_user_details' + get 'get_user_with_user_detail' => 'user_api#get_user_with_user_detail' end end # pdf印刷 - get "print_pdf/group/:group_id/output" => "print_pdf#output_rental_items_pdf" - get "print_pdf/group_all/:fes_year_id/output" => "print_pdf#output_all_groups_rental_items_pdf" - get "print_pdf/power/:fes_year_id/output" => "print_pdf#output_powers_pdf" - get "print_pdf/employees/:fes_year_id/output" => "print_pdf#output_employees_pdf" - get "print_pdf/rental_items_list/:fes_year_id/output" => "print_pdf#output_rental_items_list_pdf" - get "print_pdf/contacts/:fes_year_id/output" => "print_pdf#output_contacts_pdf" - get "print_pdf/food_products/:fes_year_id/output" => "print_pdf#output_food_products_pdf" - get "print_pdf/group_info/:group_id/output" => "print_pdf#output_group_info_pdf" - get "print_pdf/all_groups_info/:fes_year_id/output" => "print_pdf#output_all_groups_info_pdf" - get "print_pdf/health_office_documents/:fes_year_id/output" => "print_pdf#output_health_office_documents_pdf" + get 'print_pdf/group/:group_id/output' => 'print_pdf#output_rental_items_pdf' + get 'print_pdf/group_all/:fes_year_id/output' => 'print_pdf#output_all_groups_rental_items_pdf' + get 'print_pdf/power/:fes_year_id/output' => 'print_pdf#output_powers_pdf' + get 'print_pdf/employees/:fes_year_id/output' => 'print_pdf#output_employees_pdf' + get 'print_pdf/rental_items_list/:fes_year_id/output' => 'print_pdf#output_rental_items_list_pdf' + get 'print_pdf/contacts/:fes_year_id/output' => 'print_pdf#output_contacts_pdf' + get 'print_pdf/food_products/:fes_year_id/output' => 'print_pdf#output_food_products_pdf' + get 'print_pdf/group_info/:group_id/output' => 'print_pdf#output_group_info_pdf' + get 'print_pdf/all_groups_info/:fes_year_id/output' => 'print_pdf#output_all_groups_info_pdf' + get 'print_pdf/health_office_documents/:fes_year_id/output' => 'print_pdf#output_health_office_documents_pdf' namespace :api do mount_devise_token_auth_for 'User', at: 'auth', controllers: { @@ -270,5 +269,4 @@ resources :sessions end end - end diff --git a/api/config/spring.rb b/api/config/spring.rb index db5bf1307..8f6432bf6 100644 --- a/api/config/spring.rb +++ b/api/config/spring.rb @@ -1,6 +1,6 @@ Spring.watch( - ".ruby-version", - ".rbenv-vars", - "tmp/restart.txt", - "tmp/caching-dev.txt" + '.ruby-version', + '.rbenv-vars', + 'tmp/restart.txt', + 'tmp/caching-dev.txt' ) diff --git a/api/db/fixtures/develop/announcement.rb b/api/db/fixtures/develop/announcement.rb index 08c71462c..8a91da863 100644 --- a/api/db/fixtures/develop/announcement.rb +++ b/api/db/fixtures/develop/announcement.rb @@ -1,7 +1,6 @@ -Announcement.seed( :id, - { - id: 1, - group_id: 1, - message: 'announcement test' - }, -) +Announcement.seed(:id, + { + id: 1, + group_id: 1, + message: 'announcement test' + }) diff --git a/api/db/fixtures/develop/assign_group_place.rb b/api/db/fixtures/develop/assign_group_place.rb index 42abbf2da..79e646276 100644 --- a/api/db/fixtures/develop/assign_group_place.rb +++ b/api/db/fixtures/develop/assign_group_place.rb @@ -1,5 +1,3 @@ -AssignGroupPlace.seed( :id, - { id: 1 , place_order_id: 1 , - place_id: 1 - } - ) +AssignGroupPlace.seed(:id, + { id: 1, place_order_id: 1, + place_id: 1 }) diff --git a/api/db/fixtures/develop/assign_rental_item.rb b/api/db/fixtures/develop/assign_rental_item.rb index 7d7e18511..98034c36b 100644 --- a/api/db/fixtures/develop/assign_rental_item.rb +++ b/api/db/fixtures/develop/assign_rental_item.rb @@ -1,7 +1,5 @@ -AssignRentalItem.seed( :id, - { id: 1, group_id: 1 , - rental_item_id: 1 , - num: 1, - stocker_place_id: 1 - }, -) +AssignRentalItem.seed(:id, + { id: 1, group_id: 1, + rental_item_id: 1, + num: 1, + stocker_place_id: 1 }) diff --git a/api/db/fixtures/develop/assign_stage.rb b/api/db/fixtures/develop/assign_stage.rb index f699a4a26..62bd09a90 100644 --- a/api/db/fixtures/develop/assign_stage.rb +++ b/api/db/fixtures/develop/assign_stage.rb @@ -1,7 +1,5 @@ -AssignStage.seed( :id, - { id: 1, stage_order_id: 1 , - stage_id: 1 , - time_point_start: "00:00" , - time_point_end: "00:00" - } -) +AssignStage.seed(:id, + { id: 1, stage_order_id: 1, + stage_id: 1, + time_point_start: '00:00', + time_point_end: '00:00' }) diff --git a/api/db/fixtures/develop/department.rb b/api/db/fixtures/develop/department.rb index 7d8588cf7..30696ff24 100644 --- a/api/db/fixtures/develop/department.rb +++ b/api/db/fixtures/develop/department.rb @@ -1,20 +1,19 @@ -Department.seed( :id, - { id: 1, name: "機械工学分野/機械創造工学課程" }, - { id: 2, name: "電気電子情報工学分野/電気電子情報工学課程" }, - { id: 3, name: "物質生物工学分野/物質材料工学過程/生物機能工学課程" }, - { id: 4, name: "環境社会基盤工学分野/環境社会基盤工学課程" }, - { id: 5, name: "情報・経営システム工学分野/情報・経営システム工学課程" }, - { id: 6, name: "機械工学分野/機械創造工学専攻" }, - { id: 7, name: "電気電子情報工学分野/電気電子情報工学専攻" }, - { id: 8, name: "物質生物工学分野/物質材料工学専攻/生物機能工学専攻" }, - { id: 9, name: "環境社会基盤工学分野/環境社会基盤工学専攻" }, - { id: 10, name: "情報・経営システム工学分野/情報・経営システム工学専攻" }, - { id: 11, name: "量子・原子力統合工学分野/原子力システム安全工学専攻" }, - { id: 12, name: "システム安全工学専攻" }, - { id: 13, name: "技術科学イノベーション専攻" }, - { id: 14, name: "情報・制御工学分野/情報・制御工学専攻" }, - { id: 15, name: "材料工学分野/材料工学専攻" }, - { id: 16, name: "エネルギー工学分野/エネルギー・環境工学専攻" }, - { id: 17, name: "社会環境・生物機能工学分野/生物統合工学専攻" }, - { id: 18, name: "その他" }, -) +Department.seed(:id, + { id: 1, name: '機械工学分野/機械創造工学課程' }, + { id: 2, name: '電気電子情報工学分野/電気電子情報工学課程' }, + { id: 3, name: '物質生物工学分野/物質材料工学過程/生物機能工学課程' }, + { id: 4, name: '環境社会基盤工学分野/環境社会基盤工学課程' }, + { id: 5, name: '情報・経営システム工学分野/情報・経営システム工学課程' }, + { id: 6, name: '機械工学分野/機械創造工学専攻' }, + { id: 7, name: '電気電子情報工学分野/電気電子情報工学専攻' }, + { id: 8, name: '物質生物工学分野/物質材料工学専攻/生物機能工学専攻' }, + { id: 9, name: '環境社会基盤工学分野/環境社会基盤工学専攻' }, + { id: 10, name: '情報・経営システム工学分野/情報・経営システム工学専攻' }, + { id: 11, name: '量子・原子力統合工学分野/原子力システム安全工学専攻' }, + { id: 12, name: 'システム安全工学専攻' }, + { id: 13, name: '技術科学イノベーション専攻' }, + { id: 14, name: '情報・制御工学分野/情報・制御工学専攻' }, + { id: 15, name: '材料工学分野/材料工学専攻' }, + { id: 16, name: 'エネルギー工学分野/エネルギー・環境工学専攻' }, + { id: 17, name: '社会環境・生物機能工学分野/生物統合工学専攻' }, + { id: 18, name: 'その他' }) diff --git a/api/db/fixtures/develop/employee.rb b/api/db/fixtures/develop/employee.rb index 75a54f66c..48bae636e 100644 --- a/api/db/fixtures/develop/employee.rb +++ b/api/db/fixtures/develop/employee.rb @@ -1,7 +1,5 @@ -Employee.seed( :id, - { id: 1 , group_id: 1 , - name: "技大梅子" , - student_id: 44555666, - stool_test_id: 1 - } -) +Employee.seed(:id, + { id: 1, group_id: 1, + name: '技大梅子', + student_id: 44_555_666, + stool_test_id: 1 }) diff --git a/api/db/fixtures/develop/fes_year_date.rb b/api/db/fixtures/develop/fes_year_date.rb index c0b572d22..fddafad35 100644 --- a/api/db/fixtures/develop/fes_year_date.rb +++ b/api/db/fixtures/develop/fes_year_date.rb @@ -1,17 +1,14 @@ -FesYear.seed( :id, - { id: 1, year_num: 2020 }, - { id: 2, year_num: 2021 }, - { id: 3, year_num: 2022 }, - { id: 4, year_num: 2023 }, - { id: 5, year_num: 2024 }, -) - -FesDate.seed( :id, - { id: 1, days_num: 0, date: '9/18', day: 'fri', fes_year_id: 1 }, - { id: 2, days_num: 1, date: '9/19', day: 'sat', fes_year_id: 1 }, - { id: 3, days_num: 2, date: '9/20', day: 'sun', fes_year_id: 1 }, - { id: 4, days_num: 0, date: '9/17', day: 'fri', fes_year_id: 2 }, - { id: 5, days_num: 1, date: '9/18', day: 'sat', fes_year_id: 2 }, - { id: 6, days_num: 2, date: '9/19', day: 'sun', fes_year_id: 2 }, -) +FesYear.seed(:id, + { id: 1, year_num: 2020 }, + { id: 2, year_num: 2021 }, + { id: 3, year_num: 2022 }, + { id: 4, year_num: 2023 }, + { id: 5, year_num: 2024 }) +FesDate.seed(:id, + { id: 1, days_num: 0, date: '9/18', day: 'fri', fes_year_id: 1 }, + { id: 2, days_num: 1, date: '9/19', day: 'sat', fes_year_id: 1 }, + { id: 3, days_num: 2, date: '9/20', day: 'sun', fes_year_id: 1 }, + { id: 4, days_num: 0, date: '9/17', day: 'fri', fes_year_id: 2 }, + { id: 5, days_num: 1, date: '9/18', day: 'sat', fes_year_id: 2 }, + { id: 6, days_num: 2, date: '9/19', day: 'sun', fes_year_id: 2 }) diff --git a/api/db/fixtures/develop/food_product.rb b/api/db/fixtures/develop/food_product.rb index fa3936df0..1bc42140d 100644 --- a/api/db/fixtures/develop/food_product.rb +++ b/api/db/fixtures/develop/food_product.rb @@ -1,8 +1,6 @@ -FoodProduct.seed( :id, - { id: 1 , group_id: 1 , - name: 'baked tomato' , - is_cooking: true , - first_day_num: 10 , - second_day_num: 10 - } -) +FoodProduct.seed(:id, + { id: 1, group_id: 1, + name: 'baked tomato', + is_cooking: true, + first_day_num: 10, + second_day_num: 10 }) diff --git a/api/db/fixtures/develop/grade.rb b/api/db/fixtures/develop/grade.rb index 220cb7d58..ed0c11a61 100644 --- a/api/db/fixtures/develop/grade.rb +++ b/api/db/fixtures/develop/grade.rb @@ -1,19 +1,17 @@ -Grade.seed( :id, - { id: 1, name: 'B1[学部1年]' }, - { id: 2, name: 'B2[学部2年]' }, - { id: 3, name: 'B3[学部3年]' }, - { id: 4, name: 'B4[学部4年]' }, - { id: 5, name: 'M1[修士1年]' }, - { id: 6, name: 'M2[修士2年]' }, - { id: 7, name: 'D1[博士1年]' }, - { id: 8, name: 'D2[博士2年]' }, - { id: 9, name: 'D3[博士3年]' }, - { id: 10, name: 'GD1[イノベ1年]' }, - { id: 11, name: 'GD2[イノベ2年]' }, - { id: 12, name: 'GD3[イノベ3年]' }, - { id: 13, name: 'GD4[イノベ4年]' }, - { id: 14, name: 'GD5[イノベ5年]' }, - { id: 15, name: '教員' }, - { id: 16, name: 'その他' }, -) - +Grade.seed(:id, + { id: 1, name: 'B1[学部1年]' }, + { id: 2, name: 'B2[学部2年]' }, + { id: 3, name: 'B3[学部3年]' }, + { id: 4, name: 'B4[学部4年]' }, + { id: 5, name: 'M1[修士1年]' }, + { id: 6, name: 'M2[修士2年]' }, + { id: 7, name: 'D1[博士1年]' }, + { id: 8, name: 'D2[博士2年]' }, + { id: 9, name: 'D3[博士3年]' }, + { id: 10, name: 'GD1[イノベ1年]' }, + { id: 11, name: 'GD2[イノベ2年]' }, + { id: 12, name: 'GD3[イノベ3年]' }, + { id: 13, name: 'GD4[イノベ4年]' }, + { id: 14, name: 'GD5[イノベ5年]' }, + { id: 15, name: '教員' }, + { id: 16, name: 'その他' }) diff --git a/api/db/fixtures/develop/group.rb b/api/db/fixtures/develop/group.rb index ea9e10558..d5c37b85b 100644 --- a/api/db/fixtures/develop/group.rb +++ b/api/db/fixtures/develop/group.rb @@ -1,114 +1,97 @@ -Group.seed( :id, - { id: 1, name: "nutfes" , - project_name: "nutfes" , - activity: "nutfes" , - user_id: 1 , - group_category_id: 1 , - fes_year_id: 1 - }, - { id: 2, name: "華の湯" , - project_name: "華の湯" , - activity: "華の湯" , - user_id: 2 , - group_category_id: 4 , - fes_year_id: 1 - }, - { id: 3, name: "ホットピア" , - project_name: "ホットピア" , - activity: "ホットピア" , - user_id: 3 , - group_category_id: 2 , - fes_year_id: 2 - }, - { id: 4, name: "麻生の湯" , - project_name: "麻生の湯" , - activity: "麻生の湯" , - user_id: 4 , - group_category_id: 1 , - fes_year_id: 1 - }, - { id: 5, name: "きほうのゆ" , - project_name: "きほうのゆ" , - activity: "きほうのゆ" , - user_id: 5 , - group_category_id: 6 , - fes_year_id: 2 - }, - { id: 6, name: "越後川口温泉" , - project_name: "越後川口温泉" , - activity: "越後川口温泉" , - user_id: 6 , - group_category_id: 3 , - fes_year_id: 1 - }, - { id: 7, name: "ゆらいや" , - project_name: "ゆらいや" , - activity: "ゆらいや" , - user_id: 7 , - group_category_id: 1 , - fes_year_id: 1 - }, - { id: 8, name: "七福の湯" , - project_name: "七福の湯" , - activity: "七福の湯" , - user_id: 8 , - group_category_id: 2 , - fes_year_id: 1 - }, - { id: 9, name: "瀬浪温泉" , - project_name: "瀬浪温泉" , - activity: "瀬浪温泉" , - user_id: 9 , - group_category_id: 4 , - fes_year_id: 1 - }, - { id: 10, name: "岩室温泉" , - project_name: "岩室温泉" , - activity: "岩室温泉" , - user_id: 10 , - group_category_id: 2, - fes_year_id: 1 - }, - { id: 11, name: "さくらの湯" , - project_name: "さくらの湯" , - activity: "さくらの湯" , - user_id: 11 , - group_category_id: 6, - fes_year_id: 1 - }, - { id: 12, name: "月岡温泉" , - project_name: "月岡温泉" , - activity: "月岡温泉" , - user_id: 12 , - group_category_id: 2, - fes_year_id: 1 - }, - { id: 13, name: "雲海" , - project_name: "雲海" , - activity: "雲海" , - user_id: 13 , - group_category_id: 1, - fes_year_id: 1 - }, - { id: 14, name: "松之山温泉" , - project_name: "松之山温泉" , - activity: "松之山温泉" , - user_id: 14 , - group_category_id: 5, - fes_year_id: 1 - }, - { id: 15, name: "弥彦温泉" , - project_name: "弥彦温泉" , - activity: "弥彦温泉" , - user_id: 15 , - group_category_id: 2, - fes_year_id: 1 - }, - { id: 16, name: "蓬平温泉" , - project_name: "蓬平温泉" , - activity: "蓬平温泉" , - user_id: 16 , - group_category_id: 4, - fes_year_id: 1 - }, -) +Group.seed(:id, + { id: 1, name: 'nutfes', + project_name: 'nutfes', + activity: 'nutfes', + user_id: 1, + group_category_id: 1, + fes_year_id: 1 }, + { id: 2, name: '華の湯', + project_name: '華の湯', + activity: '華の湯', + user_id: 2, + group_category_id: 4, + fes_year_id: 1 }, + { id: 3, name: 'ホットピア', + project_name: 'ホットピア', + activity: 'ホットピア', + user_id: 3, + group_category_id: 2, + fes_year_id: 2 }, + { id: 4, name: '麻生の湯', + project_name: '麻生の湯', + activity: '麻生の湯', + user_id: 4, + group_category_id: 1, + fes_year_id: 1 }, + { id: 5, name: 'きほうのゆ', + project_name: 'きほうのゆ', + activity: 'きほうのゆ', + user_id: 5, + group_category_id: 6, + fes_year_id: 2 }, + { id: 6, name: '越後川口温泉', + project_name: '越後川口温泉', + activity: '越後川口温泉', + user_id: 6, + group_category_id: 3, + fes_year_id: 1 }, + { id: 7, name: 'ゆらいや', + project_name: 'ゆらいや', + activity: 'ゆらいや', + user_id: 7, + group_category_id: 1, + fes_year_id: 1 }, + { id: 8, name: '七福の湯', + project_name: '七福の湯', + activity: '七福の湯', + user_id: 8, + group_category_id: 2, + fes_year_id: 1 }, + { id: 9, name: '瀬浪温泉', + project_name: '瀬浪温泉', + activity: '瀬浪温泉', + user_id: 9, + group_category_id: 4, + fes_year_id: 1 }, + { id: 10, name: '岩室温泉', + project_name: '岩室温泉', + activity: '岩室温泉', + user_id: 10, + group_category_id: 2, + fes_year_id: 1 }, + { id: 11, name: 'さくらの湯', + project_name: 'さくらの湯', + activity: 'さくらの湯', + user_id: 11, + group_category_id: 6, + fes_year_id: 1 }, + { id: 12, name: '月岡温泉', + project_name: '月岡温泉', + activity: '月岡温泉', + user_id: 12, + group_category_id: 2, + fes_year_id: 1 }, + { id: 13, name: '雲海', + project_name: '雲海', + activity: '雲海', + user_id: 13, + group_category_id: 1, + fes_year_id: 1 }, + { id: 14, name: '松之山温泉', + project_name: '松之山温泉', + activity: '松之山温泉', + user_id: 14, + group_category_id: 5, + fes_year_id: 1 }, + { id: 15, name: '弥彦温泉', + project_name: '弥彦温泉', + activity: '弥彦温泉', + user_id: 15, + group_category_id: 2, + fes_year_id: 1 }, + { id: 16, name: '蓬平温泉', + project_name: '蓬平温泉', + activity: '蓬平温泉', + user_id: 16, + group_category_id: 4, + fes_year_id: 1 }) diff --git a/api/db/fixtures/develop/group_category.rb b/api/db/fixtures/develop/group_category.rb index 44c19a298..25eb022c8 100644 --- a/api/db/fixtures/develop/group_category.rb +++ b/api/db/fixtures/develop/group_category.rb @@ -1,9 +1,8 @@ -GroupCategory.seed( :id, - { id: 1, name: '食品販売' }, - { id: 2, name: '物品販売' }, - { id: 3, name: 'ステージ' }, - { id: 4, name: '展示・体験' }, - { id: 5, name: '研究室' }, - { id: 6, name: '実行委員' }, - { id: 7, name: 'その他' } -) +GroupCategory.seed(:id, + { id: 1, name: '食品販売' }, + { id: 2, name: '物品販売' }, + { id: 3, name: 'ステージ' }, + { id: 4, name: '展示・体験' }, + { id: 5, name: '研究室' }, + { id: 6, name: '実行委員' }, + { id: 7, name: 'その他' }) diff --git a/api/db/fixtures/develop/memo.rb b/api/db/fixtures/develop/memo.rb index a6d305d92..f350a0d98 100644 --- a/api/db/fixtures/develop/memo.rb +++ b/api/db/fixtures/develop/memo.rb @@ -1,4 +1,2 @@ -Memo.seed( :id, - { id: 1, content: 'メモ', user_id: 1 }, -) - +Memo.seed(:id, + { id: 1, content: 'メモ', user_id: 1 }) diff --git a/api/db/fixtures/develop/news.rb b/api/db/fixtures/develop/news.rb index f9460146c..6917f884b 100644 --- a/api/db/fixtures/develop/news.rb +++ b/api/db/fixtures/develop/news.rb @@ -1,8 +1,5 @@ -News.seed( :id, - { id: 1, title: "nutfes-news1" , - body: "参加団体管理アプリです." - }, - { id: 2, title: "nutfes-news2" , - body: "参加団体管理アプリです2." - } -) +News.seed(:id, + { id: 1, title: 'nutfes-news1', + body: '参加団体管理アプリです.' }, + { id: 2, title: 'nutfes-news2', + body: '参加団体管理アプリです2.' }) diff --git a/api/db/fixtures/develop/place.rb b/api/db/fixtures/develop/place.rb index a5326da19..1874f7fa6 100644 --- a/api/db/fixtures/develop/place.rb +++ b/api/db/fixtures/develop/place.rb @@ -1,13 +1,12 @@ -Place.seed( :id, - { id: 1 , name: '希望なし' }, - { id: 2 , name: '講義棟部屋A (103講義室などの大きい講義室)' } , - { id: 3 , name: '講義棟部屋B (104講義室などの小さい講義室)' } , - { id: 4 , name: '事務棟エリア(講義室は含まない。)' } , - { id: 5 , name: '図書館エリア' } , - { id: 6 , name: '電気棟エリア' } , - { id: 7 , name: 'メインステージエリア(情報処理センター前)' } , - { id: 8 , name: '機械・建設棟エリア' }, - { id: 9 , name: '生物棟エリア(電力使用不可)' }, - { id: 10 , name: '環境棟エリア' }, - { id: 11 , name: 'その他のエリア' }, -) +Place.seed(:id, + { id: 1, name: '希望なし' }, + { id: 2, name: '講義棟部屋A (103講義室などの大きい講義室)' }, + { id: 3, name: '講義棟部屋B (104講義室などの小さい講義室)' }, + { id: 4, name: '事務棟エリア(講義室は含まない。)' }, + { id: 5, name: '図書館エリア' }, + { id: 6, name: '電気棟エリア' }, + { id: 7, name: 'メインステージエリア(情報処理センター前)' }, + { id: 8, name: '機械・建設棟エリア' }, + { id: 9, name: '生物棟エリア(電力使用不可)' }, + { id: 10, name: '環境棟エリア' }, + { id: 11, name: 'その他のエリア' }) diff --git a/api/db/fixtures/develop/place_allow_list.rb b/api/db/fixtures/develop/place_allow_list.rb index 637a64b5a..d42fa08ad 100644 --- a/api/db/fixtures/develop/place_allow_list.rb +++ b/api/db/fixtures/develop/place_allow_list.rb @@ -1,602 +1,451 @@ -PlaceAllowList.seed( :id, - { id: 1 , place_id: 1 , - group_category_id: 1 , - enable: true - }, - { id: 2 , place_id: 1 , - group_category_id: 2 , - enable: true - }, - { id: 3 , place_id: 1 , - group_category_id: 3 , - enable: true - }, - { id: 4 , place_id: 1 , - group_category_id: 4 , - enable: true - }, - { id: 5 , place_id: 1 , - group_category_id: 5 , - enable: true - }, - { id: 6 , place_id: 1 , - group_category_id: 6 , - enable: true - }, - { id: 7 , place_id: 2 , - group_category_id: 1 , - enable: true - }, - { id: 8 , place_id: 2 , - group_category_id: 2 , - enable: true - }, - { id: 9 , place_id: 2 , - group_category_id: 3 , - enable: true - }, - { id: 10 , place_id: 2 , - group_category_id: 4 , - enable: true - }, - { id: 11 , place_id: 2 , - group_category_id: 5 , - enable: true - }, - { id: 12 , place_id: 2 , - group_category_id: 6 , - enable: true - }, - { id: 13 , place_id: 3 , - group_category_id: 1 , - enable: true - }, - { id: 14 , place_id: 3 , - group_category_id: 2 , - enable: true - }, - { id: 15 , place_id: 3 , - group_category_id: 3 , - enable: true - }, - { id: 16 , place_id: 3 , - group_category_id: 4 , - enable: true - }, - { id: 17 , place_id: 3 , - group_category_id: 5 , - enable: true - }, - { id: 18 , place_id: 3 , - group_category_id: 6 , - enable: true - }, - { id: 19 , place_id: 4 , - group_category_id: 1 , - enable: true - }, - { id: 20 , place_id: 4 , - group_category_id: 2 , - enable: true - }, - { id: 21 , place_id: 4 , - group_category_id: 3 , - enable: true - }, - { id: 22 , place_id: 4 , - group_category_id: 4 , - enable: true - }, - { id: 23 , place_id: 4 , - group_category_id: 5 , - enable: true - }, - { id: 24 , place_id: 4 , - group_category_id: 6 , - enable: true - }, - { id: 25 , place_id: 5 , - group_category_id: 1 , - enable: true - }, - { id: 26 , place_id: 5 , - group_category_id: 2 , - enable: true - }, - { id: 27 , place_id: 5 , - group_category_id: 3 , - enable: true - }, - { id: 28 , place_id: 5 , - group_category_id: 4 , - enable: true - }, - { id: 29 , place_id: 5 , - group_category_id: 5 , - enable: true - }, - { id: 30 , place_id: 5 , - group_category_id: 6 , - enable: true - }, - { id: 31 , place_id: 6 , - group_category_id: 1 , - enable: true - }, - { id: 32 , place_id: 6 , - group_category_id: 2 , - enable: true - }, - { id: 33 , place_id: 6 , - group_category_id: 3 , - enable: true - }, - { id: 34 , place_id: 6 , - group_category_id: 4 , - enable: true - }, - { id: 35 , place_id: 6 , - group_category_id: 5 , - enable: true - }, - { id: 36 , place_id: 6 , - group_category_id: 6 , - enable: true - }, - { id: 37 , place_id: 7 , - group_category_id: 1 , - enable: true - }, - { id: 38 , place_id: 7 , - group_category_id: 2 , - enable: true - }, - { id: 39 , place_id: 7 , - group_category_id: 3 , - enable: true - }, - { id: 40 , place_id: 7 , - group_category_id: 4 , - enable: true - }, - { id: 41 , place_id: 7 , - group_category_id: 5 , - enable: true - }, - { id: 42 , place_id: 7 , - group_category_id: 6 , - enable: true - }, - { id: 43 , place_id: 8 , - group_category_id: 1 , - enable: true - }, - { id: 44 , place_id: 8 , - group_category_id: 2 , - enable: true - }, - { id: 45 , place_id: 8 , - group_category_id: 3 , - enable: true - }, - { id: 46 , place_id: 8 , - group_category_id: 4 , - enable: true - }, - { id: 47 , place_id: 8 , - group_category_id: 5 , - enable: true - }, - { id: 48 , place_id: 8 , - group_category_id: 6 , - enable: true - }, - { id: 49 , place_id: 9 , - group_category_id: 1 , - enable: true - }, - { id: 50 , place_id: 9 , - group_category_id: 2 , - enable: true - }, - { id: 51 , place_id: 9 , - group_category_id: 3 , - enable: true - }, - { id: 52 , place_id: 9 , - group_category_id: 4 , - enable: true - }, - { id: 53 , place_id: 9 , - group_category_id: 5 , - enable: true - }, - { id: 54 , place_id: 9 , - group_category_id: 6 , - enable: true - }, - { id: 55 , place_id: 10 , - group_category_id: 1 , - enable: true - }, - { id: 56 , place_id: 10 , - group_category_id: 2 , - enable: true - }, - { id: 57 , place_id: 10 , - group_category_id: 3 , - enable: true - }, - { id: 58 , place_id: 10 , - group_category_id: 4 , - enable: true - }, - { id: 59 , place_id: 10 , - group_category_id: 5 , - enable: true - }, - { id: 60 , place_id: 10 , - group_category_id: 6 , - enable: true - }, - { id: 61 , place_id: 11 , - group_category_id: 1 , - enable: true - }, - { id: 62 , place_id: 11 , - group_category_id: 2 , - enable: true - }, - { id: 63 , place_id: 11 , - group_category_id: 3 , - enable: true - }, - { id: 64 , place_id: 11 , - group_category_id: 4 , - enable: true - }, - { id: 65 , place_id: 11 , - group_category_id: 5 , - enable: true - }, - { id: 66 , place_id: 11 , - group_category_id: 6 , - enable: true - }, - { id: 67 , place_id: 12 , - group_category_id: 1 , - enable: true - }, - { id: 68 , place_id: 12 , - group_category_id: 2 , - enable: true - }, - { id: 69 , place_id: 12 , - group_category_id: 3 , - enable: true - }, - { id: 70 , place_id: 12 , - group_category_id: 4 , - enable: true - }, - { id: 71 , place_id: 12 , - group_category_id: 5 , - enable: true - }, - { id: 72 , place_id: 12 , - group_category_id: 6 , - enable: true - }, - { id: 73 , place_id: 13 , - group_category_id: 1 , - enable: true - }, - { id: 74 , place_id: 13 , - group_category_id: 2 , - enable: true - }, - { id: 75 , place_id: 13 , - group_category_id: 3 , - enable: true - }, - { id: 76 , place_id: 13 , - group_category_id: 4 , - enable: true - }, - { id: 77 , place_id: 13 , - group_category_id: 5 , - enable: true - }, - { id: 78 , place_id: 13 , - group_category_id: 6 , - enable: true - }, - { id: 79 , place_id: 14 , - group_category_id: 1 , - enable: true - }, - { id: 80 , place_id: 14 , - group_category_id: 2 , - enable: true - }, - { id: 81 , place_id: 14 , - group_category_id: 3 , - enable: true - }, - { id: 82 , place_id: 14 , - group_category_id: 4 , - enable: true - }, - { id: 83 , place_id: 14 , - group_category_id: 5 , - enable: true - }, - { id: 84 , place_id: 14 , - group_category_id: 6 , - enable: true - }, - { id: 85 , place_id: 15 , - group_category_id: 1 , - enable: true - }, - { id: 86 , place_id: 15 , - group_category_id: 2 , - enable: true - }, - { id: 87 , place_id: 15 , - group_category_id: 3 , - enable: true - }, - { id: 88 , place_id: 15 , - group_category_id: 4 , - enable: true - }, - { id: 89 , place_id: 15 , - group_category_id: 5 , - enable: true - }, - { id: 90 , place_id: 15 , - group_category_id: 6 , - enable: true - }, - { id: 91 , place_id: 16 , - group_category_id: 1 , - enable: true - }, - { id: 92 , place_id: 16 , - group_category_id: 2 , - enable: true - }, - { id: 93 , place_id: 16 , - group_category_id: 3 , - enable: true - }, - { id: 94 , place_id: 16 , - group_category_id: 4 , - enable: true - }, - { id: 95 , place_id: 16 , - group_category_id: 5 , - enable: true - }, - { id: 96 , place_id: 16 , - group_category_id: 6 , - enable: true - }, - { id: 97 , place_id: 17 , - group_category_id: 1 , - enable: true - }, - { id: 98 , place_id: 17 , - group_category_id: 2 , - enable: true - }, - { id: 99 , place_id: 17 , - group_category_id: 3 , - enable: true - }, - { id: 100 , place_id: 17 , - group_category_id: 4 , - enable: true - }, - { id: 101 , place_id: 17 , - group_category_id: 5 , - enable: true - }, - { id: 102 , place_id: 17 , - group_category_id: 6 , - enable: true - }, - { id: 103 , place_id: 18 , - group_category_id: 1 , - enable: true - }, - { id: 104 , place_id: 18 , - group_category_id: 2 , - enable: true - }, - { id: 105 , place_id: 18 , - group_category_id: 3 , - enable: true - }, - { id: 106 , place_id: 18 , - group_category_id: 4 , - enable: true - }, - { id: 107 , place_id: 18 , - group_category_id: 5 , - enable: true - }, - { id: 108 , place_id: 18 , - group_category_id: 6 , - enable: true - }, - { id: 109 , place_id: 19 , - group_category_id: 1 , - enable: true - }, - { id: 110 , place_id: 19 , - group_category_id: 2 , - enable: true - }, - { id: 111 , place_id: 19 , - group_category_id: 3 , - enable: true - }, - { id: 112 , place_id: 19 , - group_category_id: 4 , - enable: true - }, - { id: 113 , place_id: 19 , - group_category_id: 5 , - enable: true - }, - { id: 114 , place_id: 19 , - group_category_id: 6 , - enable: true - }, - { id: 115 , place_id: 20 , - group_category_id: 1 , - enable: true - }, - { id: 116 , place_id: 20 , - group_category_id: 2 , - enable: true - }, - { id: 117 , place_id: 20 , - group_category_id: 3 , - enable: true - }, - { id: 118 , place_id: 20 , - group_category_id: 4 , - enable: true - }, - { id: 119 , place_id: 20 , - group_category_id: 5 , - enable: true - }, - { id: 120 , place_id: 20 , - group_category_id: 6 , - enable: true - }, - { id: 121 , place_id: 21 , - group_category_id: 1 , - enable: true - }, - { id: 122 , place_id: 21 , - group_category_id: 2 , - enable: true - }, - { id: 123 , place_id: 21 , - group_category_id: 3 , - enable: true - }, - { id: 124 , place_id: 21 , - group_category_id: 4 , - enable: true - }, - { id: 125 , place_id: 21 , - group_category_id: 5 , - enable: true - }, - { id: 126 , place_id: 21 , - group_category_id: 6 , - enable: true - }, - { id: 127 , place_id: 22 , - group_category_id: 1 , - enable: true - }, - { id: 128 , place_id: 22 , - group_category_id: 2 , - enable: true - }, - { id: 129 , place_id: 22 , - group_category_id: 3 , - enable: true - }, - { id: 130 , place_id: 22 , - group_category_id: 4 , - enable: true - }, - { id: 131 , place_id: 22 , - group_category_id: 5 , - enable: true - }, - { id: 132 , place_id: 22 , - group_category_id: 6 , - enable: true - }, - { id: 133 , place_id: 23 , - group_category_id: 1 , - enable: true - }, - { id: 134 , place_id: 23 , - group_category_id: 2 , - enable: true - }, - { id: 135 , place_id: 23 , - group_category_id: 3 , - enable: true - }, - { id: 136 , place_id: 23 , - group_category_id: 4 , - enable: true - }, - { id: 137 , place_id: 23 , - group_category_id: 5 , - enable: true - }, - { id: 138 , place_id: 23 , - group_category_id: 6 , - enable: true - }, - { id: 139 , place_id: 24 , - group_category_id: 1 , - enable: true - }, - { id: 140 , place_id: 24 , - group_category_id: 2 , - enable: true - }, - { id: 141 , place_id: 24 , - group_category_id: 3 , - enable: true - }, - { id: 142 , place_id: 24 , - group_category_id: 4 , - enable: true - }, - { id: 143 , place_id: 24 , - group_category_id: 5 , - enable: true - }, - { id: 144 , place_id: 24 , - group_category_id: 6 , - enable: true - }, - { id: 145 , place_id: 25 , - group_category_id: 1 , - enable: true - }, - { id: 146 , place_id: 25 , - group_category_id: 2 , - enable: true - }, - { id: 147 , place_id: 25 , - group_category_id: 3 , - enable: true - }, - { id: 148 , place_id: 25 , - group_category_id: 4 , - enable: false - }, - { id: 149 , place_id: 25 , - group_category_id: 5 , - enable: false - }, - { id: 150 , place_id: 25 , - group_category_id: 6 , - enable: false - } -) +PlaceAllowList.seed(:id, + { id: 1, place_id: 1, + group_category_id: 1, + enable: true }, + { id: 2, place_id: 1, + group_category_id: 2, + enable: true }, + { id: 3, place_id: 1, + group_category_id: 3, + enable: true }, + { id: 4, place_id: 1, + group_category_id: 4, + enable: true }, + { id: 5, place_id: 1, + group_category_id: 5, + enable: true }, + { id: 6, place_id: 1, + group_category_id: 6, + enable: true }, + { id: 7, place_id: 2, + group_category_id: 1, + enable: true }, + { id: 8, place_id: 2, + group_category_id: 2, + enable: true }, + { id: 9, place_id: 2, + group_category_id: 3, + enable: true }, + { id: 10, place_id: 2, + group_category_id: 4, + enable: true }, + { id: 11, place_id: 2, + group_category_id: 5, + enable: true }, + { id: 12, place_id: 2, + group_category_id: 6, + enable: true }, + { id: 13, place_id: 3, + group_category_id: 1, + enable: true }, + { id: 14, place_id: 3, + group_category_id: 2, + enable: true }, + { id: 15, place_id: 3, + group_category_id: 3, + enable: true }, + { id: 16, place_id: 3, + group_category_id: 4, + enable: true }, + { id: 17, place_id: 3, + group_category_id: 5, + enable: true }, + { id: 18, place_id: 3, + group_category_id: 6, + enable: true }, + { id: 19, place_id: 4, + group_category_id: 1, + enable: true }, + { id: 20, place_id: 4, + group_category_id: 2, + enable: true }, + { id: 21, place_id: 4, + group_category_id: 3, + enable: true }, + { id: 22, place_id: 4, + group_category_id: 4, + enable: true }, + { id: 23, place_id: 4, + group_category_id: 5, + enable: true }, + { id: 24, place_id: 4, + group_category_id: 6, + enable: true }, + { id: 25, place_id: 5, + group_category_id: 1, + enable: true }, + { id: 26, place_id: 5, + group_category_id: 2, + enable: true }, + { id: 27, place_id: 5, + group_category_id: 3, + enable: true }, + { id: 28, place_id: 5, + group_category_id: 4, + enable: true }, + { id: 29, place_id: 5, + group_category_id: 5, + enable: true }, + { id: 30, place_id: 5, + group_category_id: 6, + enable: true }, + { id: 31, place_id: 6, + group_category_id: 1, + enable: true }, + { id: 32, place_id: 6, + group_category_id: 2, + enable: true }, + { id: 33, place_id: 6, + group_category_id: 3, + enable: true }, + { id: 34, place_id: 6, + group_category_id: 4, + enable: true }, + { id: 35, place_id: 6, + group_category_id: 5, + enable: true }, + { id: 36, place_id: 6, + group_category_id: 6, + enable: true }, + { id: 37, place_id: 7, + group_category_id: 1, + enable: true }, + { id: 38, place_id: 7, + group_category_id: 2, + enable: true }, + { id: 39, place_id: 7, + group_category_id: 3, + enable: true }, + { id: 40, place_id: 7, + group_category_id: 4, + enable: true }, + { id: 41, place_id: 7, + group_category_id: 5, + enable: true }, + { id: 42, place_id: 7, + group_category_id: 6, + enable: true }, + { id: 43, place_id: 8, + group_category_id: 1, + enable: true }, + { id: 44, place_id: 8, + group_category_id: 2, + enable: true }, + { id: 45, place_id: 8, + group_category_id: 3, + enable: true }, + { id: 46, place_id: 8, + group_category_id: 4, + enable: true }, + { id: 47, place_id: 8, + group_category_id: 5, + enable: true }, + { id: 48, place_id: 8, + group_category_id: 6, + enable: true }, + { id: 49, place_id: 9, + group_category_id: 1, + enable: true }, + { id: 50, place_id: 9, + group_category_id: 2, + enable: true }, + { id: 51, place_id: 9, + group_category_id: 3, + enable: true }, + { id: 52, place_id: 9, + group_category_id: 4, + enable: true }, + { id: 53, place_id: 9, + group_category_id: 5, + enable: true }, + { id: 54, place_id: 9, + group_category_id: 6, + enable: true }, + { id: 55, place_id: 10, + group_category_id: 1, + enable: true }, + { id: 56, place_id: 10, + group_category_id: 2, + enable: true }, + { id: 57, place_id: 10, + group_category_id: 3, + enable: true }, + { id: 58, place_id: 10, + group_category_id: 4, + enable: true }, + { id: 59, place_id: 10, + group_category_id: 5, + enable: true }, + { id: 60, place_id: 10, + group_category_id: 6, + enable: true }, + { id: 61, place_id: 11, + group_category_id: 1, + enable: true }, + { id: 62, place_id: 11, + group_category_id: 2, + enable: true }, + { id: 63, place_id: 11, + group_category_id: 3, + enable: true }, + { id: 64, place_id: 11, + group_category_id: 4, + enable: true }, + { id: 65, place_id: 11, + group_category_id: 5, + enable: true }, + { id: 66, place_id: 11, + group_category_id: 6, + enable: true }, + { id: 67, place_id: 12, + group_category_id: 1, + enable: true }, + { id: 68, place_id: 12, + group_category_id: 2, + enable: true }, + { id: 69, place_id: 12, + group_category_id: 3, + enable: true }, + { id: 70, place_id: 12, + group_category_id: 4, + enable: true }, + { id: 71, place_id: 12, + group_category_id: 5, + enable: true }, + { id: 72, place_id: 12, + group_category_id: 6, + enable: true }, + { id: 73, place_id: 13, + group_category_id: 1, + enable: true }, + { id: 74, place_id: 13, + group_category_id: 2, + enable: true }, + { id: 75, place_id: 13, + group_category_id: 3, + enable: true }, + { id: 76, place_id: 13, + group_category_id: 4, + enable: true }, + { id: 77, place_id: 13, + group_category_id: 5, + enable: true }, + { id: 78, place_id: 13, + group_category_id: 6, + enable: true }, + { id: 79, place_id: 14, + group_category_id: 1, + enable: true }, + { id: 80, place_id: 14, + group_category_id: 2, + enable: true }, + { id: 81, place_id: 14, + group_category_id: 3, + enable: true }, + { id: 82, place_id: 14, + group_category_id: 4, + enable: true }, + { id: 83, place_id: 14, + group_category_id: 5, + enable: true }, + { id: 84, place_id: 14, + group_category_id: 6, + enable: true }, + { id: 85, place_id: 15, + group_category_id: 1, + enable: true }, + { id: 86, place_id: 15, + group_category_id: 2, + enable: true }, + { id: 87, place_id: 15, + group_category_id: 3, + enable: true }, + { id: 88, place_id: 15, + group_category_id: 4, + enable: true }, + { id: 89, place_id: 15, + group_category_id: 5, + enable: true }, + { id: 90, place_id: 15, + group_category_id: 6, + enable: true }, + { id: 91, place_id: 16, + group_category_id: 1, + enable: true }, + { id: 92, place_id: 16, + group_category_id: 2, + enable: true }, + { id: 93, place_id: 16, + group_category_id: 3, + enable: true }, + { id: 94, place_id: 16, + group_category_id: 4, + enable: true }, + { id: 95, place_id: 16, + group_category_id: 5, + enable: true }, + { id: 96, place_id: 16, + group_category_id: 6, + enable: true }, + { id: 97, place_id: 17, + group_category_id: 1, + enable: true }, + { id: 98, place_id: 17, + group_category_id: 2, + enable: true }, + { id: 99, place_id: 17, + group_category_id: 3, + enable: true }, + { id: 100, place_id: 17, + group_category_id: 4, + enable: true }, + { id: 101, place_id: 17, + group_category_id: 5, + enable: true }, + { id: 102, place_id: 17, + group_category_id: 6, + enable: true }, + { id: 103, place_id: 18, + group_category_id: 1, + enable: true }, + { id: 104, place_id: 18, + group_category_id: 2, + enable: true }, + { id: 105, place_id: 18, + group_category_id: 3, + enable: true }, + { id: 106, place_id: 18, + group_category_id: 4, + enable: true }, + { id: 107, place_id: 18, + group_category_id: 5, + enable: true }, + { id: 108, place_id: 18, + group_category_id: 6, + enable: true }, + { id: 109, place_id: 19, + group_category_id: 1, + enable: true }, + { id: 110, place_id: 19, + group_category_id: 2, + enable: true }, + { id: 111, place_id: 19, + group_category_id: 3, + enable: true }, + { id: 112, place_id: 19, + group_category_id: 4, + enable: true }, + { id: 113, place_id: 19, + group_category_id: 5, + enable: true }, + { id: 114, place_id: 19, + group_category_id: 6, + enable: true }, + { id: 115, place_id: 20, + group_category_id: 1, + enable: true }, + { id: 116, place_id: 20, + group_category_id: 2, + enable: true }, + { id: 117, place_id: 20, + group_category_id: 3, + enable: true }, + { id: 118, place_id: 20, + group_category_id: 4, + enable: true }, + { id: 119, place_id: 20, + group_category_id: 5, + enable: true }, + { id: 120, place_id: 20, + group_category_id: 6, + enable: true }, + { id: 121, place_id: 21, + group_category_id: 1, + enable: true }, + { id: 122, place_id: 21, + group_category_id: 2, + enable: true }, + { id: 123, place_id: 21, + group_category_id: 3, + enable: true }, + { id: 124, place_id: 21, + group_category_id: 4, + enable: true }, + { id: 125, place_id: 21, + group_category_id: 5, + enable: true }, + { id: 126, place_id: 21, + group_category_id: 6, + enable: true }, + { id: 127, place_id: 22, + group_category_id: 1, + enable: true }, + { id: 128, place_id: 22, + group_category_id: 2, + enable: true }, + { id: 129, place_id: 22, + group_category_id: 3, + enable: true }, + { id: 130, place_id: 22, + group_category_id: 4, + enable: true }, + { id: 131, place_id: 22, + group_category_id: 5, + enable: true }, + { id: 132, place_id: 22, + group_category_id: 6, + enable: true }, + { id: 133, place_id: 23, + group_category_id: 1, + enable: true }, + { id: 134, place_id: 23, + group_category_id: 2, + enable: true }, + { id: 135, place_id: 23, + group_category_id: 3, + enable: true }, + { id: 136, place_id: 23, + group_category_id: 4, + enable: true }, + { id: 137, place_id: 23, + group_category_id: 5, + enable: true }, + { id: 138, place_id: 23, + group_category_id: 6, + enable: true }, + { id: 139, place_id: 24, + group_category_id: 1, + enable: true }, + { id: 140, place_id: 24, + group_category_id: 2, + enable: true }, + { id: 141, place_id: 24, + group_category_id: 3, + enable: true }, + { id: 142, place_id: 24, + group_category_id: 4, + enable: true }, + { id: 143, place_id: 24, + group_category_id: 5, + enable: true }, + { id: 144, place_id: 24, + group_category_id: 6, + enable: true }, + { id: 145, place_id: 25, + group_category_id: 1, + enable: true }, + { id: 146, place_id: 25, + group_category_id: 2, + enable: true }, + { id: 147, place_id: 25, + group_category_id: 3, + enable: true }, + { id: 148, place_id: 25, + group_category_id: 4, + enable: false }, + { id: 149, place_id: 25, + group_category_id: 5, + enable: false }, + { id: 150, place_id: 25, + group_category_id: 6, + enable: false }) diff --git a/api/db/fixtures/develop/place_order.rb b/api/db/fixtures/develop/place_order.rb index 8743e1d2b..87b4f3de7 100644 --- a/api/db/fixtures/develop/place_order.rb +++ b/api/db/fixtures/develop/place_order.rb @@ -1,8 +1,6 @@ -PlaceOrder.seed( :id, - { id: 1 , group_id: 1 , - first: 1 , - second: 2 , - third: 3 , - remark: 'sample' - } -) +PlaceOrder.seed(:id, + { id: 1, group_id: 1, + first: 1, + second: 2, + third: 3, + remark: 'sample' }) diff --git a/api/db/fixtures/develop/power_order.rb b/api/db/fixtures/develop/power_order.rb index bdc262b89..76048c1a6 100644 --- a/api/db/fixtures/develop/power_order.rb +++ b/api/db/fixtures/develop/power_order.rb @@ -1,9 +1,7 @@ -PowerOrder.seed( :id, - { id: 1 , group_id: 1, - item: "nutfes-sample", - power: 0, - manufacturer: "nutfes", - model: "nutfes", - item_url: "https://nutfes.net" - } -) +PowerOrder.seed(:id, + { id: 1, group_id: 1, + item: 'nutfes-sample', + power: 0, + manufacturer: 'nutfes', + model: 'nutfes', + item_url: 'https://nutfes.net' }) diff --git a/api/db/fixtures/develop/purchase_list.rb b/api/db/fixtures/develop/purchase_list.rb index 921093114..cafea66c9 100644 --- a/api/db/fixtures/develop/purchase_list.rb +++ b/api/db/fixtures/develop/purchase_list.rb @@ -1,10 +1,8 @@ -PurchaseList.seed( :id, - { id: 1 , food_product_id: 1 , - shop_id: 1 , - fes_date_id: 1, - items: 'tomato', - is_fresh: true, - purchase_date: '2021-05-25', - url: 'https://amazon.co.jp' - } -) +PurchaseList.seed(:id, + { id: 1, food_product_id: 1, + shop_id: 1, + fes_date_id: 1, + items: 'tomato', + is_fresh: true, + purchase_date: '2021-05-25', + url: 'https://amazon.co.jp' }) diff --git a/api/db/fixtures/develop/rentable_item.rb b/api/db/fixtures/develop/rentable_item.rb index 3f05ecbd4..2caad658a 100644 --- a/api/db/fixtures/develop/rentable_item.rb +++ b/api/db/fixtures/develop/rentable_item.rb @@ -1,6 +1,4 @@ -RentableItem.seed( :id, - { id: 1, stocker_item_id: 1 , - stocker_place_id: 1 , - max_num: 1 - } -) +RentableItem.seed(:id, + { id: 1, stocker_item_id: 1, + stocker_place_id: 1, + max_num: 1 }) diff --git a/api/db/fixtures/develop/rental_item.rb b/api/db/fixtures/develop/rental_item.rb index 64e436f77..642eac412 100644 --- a/api/db/fixtures/develop/rental_item.rb +++ b/api/db/fixtures/develop/rental_item.rb @@ -1,34 +1,65 @@ -RentalItem.seed( :id, - { id: 1 , name: '机' , is_inside_shop_rentable: true, is_outside_shop_rentable: true, is_stage_rentable: true }, - { id: 2 , name: '長机' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: true}, - { id: 3 , name: '椅子' , is_inside_shop_rentable: true, is_outside_shop_rentable: true, is_stage_rentable: true }, - { id: 4 , name: 'パーテーション' , is_inside_shop_rentable: true, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 5 , name: 'パーテーション足' , is_inside_shop_rentable: true, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 6 , name: '掲示板' , is_inside_shop_rentable: true, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 7 , name: 'テント' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 8 , name: '小テント' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 9 , name: 'テント足' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 10 , name: 'Aスタンド' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 11 , name: 'トランシーバー' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 12 , name: 'パイロン' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 13 , name: 'パイロンおもり' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 14 , name: 'バケツ' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 15 , name: 'バケツ24下' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 16 , name: 'バケツ小' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 17 , name: 'バケツ大' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 18 , name: 'パラソル' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 19 , name: 'ブルーシート(1000*1000)' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 20 , name: 'ポリバケツ' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 21 , name: '暗幕(350*305)' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 22 , name: '暗幕(360*290)' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 23 , name: '暗幕(240*200)' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 24 , name: '拡声器' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 25 , name: '台車' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 26 , name: '電ドラ' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 27 , name: '入試課看板(1100*600)' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 28 , name: '入試課看板(1200*1200)' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 29 , name: '入試課看板(1300*600)' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 30 , name: 'トラバー(1.5m)' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 31 , name: 'トラバー(1.7m)' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 32 , name: '配線カバー' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, -) +RentalItem.seed(:id, + { id: 1, name: '机', is_inside_shop_rentable: true, is_outside_shop_rentable: true, + is_stage_rentable: true }, + { id: 2, name: '長机', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: true }, + { id: 3, name: '椅子', is_inside_shop_rentable: true, is_outside_shop_rentable: true, + is_stage_rentable: true }, + { id: 4, name: 'パーテーション', is_inside_shop_rentable: true, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 5, name: 'パーテーション足', is_inside_shop_rentable: true, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 6, name: '掲示板', is_inside_shop_rentable: true, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 7, name: 'テント', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 8, name: '小テント', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 9, name: 'テント足', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 10, name: 'Aスタンド', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 11, name: 'トランシーバー', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 12, name: 'パイロン', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 13, name: 'パイロンおもり', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 14, name: 'バケツ', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 15, name: 'バケツ24下', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 16, name: 'バケツ小', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 17, name: 'バケツ大', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 18, name: 'パラソル', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 19, name: 'ブルーシート(1000*1000)', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 20, name: 'ポリバケツ', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 21, name: '暗幕(350*305)', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 22, name: '暗幕(360*290)', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 23, name: '暗幕(240*200)', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 24, name: '拡声器', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 25, name: '台車', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 26, name: '電ドラ', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 27, name: '入試課看板(1100*600)', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 28, name: '入試課看板(1200*1200)', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 29, name: '入試課看板(1300*600)', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 30, name: 'トラバー(1.5m)', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 31, name: 'トラバー(1.7m)', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 32, name: '配線カバー', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }) diff --git a/api/db/fixtures/develop/rental_item_allow_list.rb b/api/db/fixtures/develop/rental_item_allow_list.rb index 6ab546925..1d287c243 100644 --- a/api/db/fixtures/develop/rental_item_allow_list.rb +++ b/api/db/fixtures/develop/rental_item_allow_list.rb @@ -1,62 +1,61 @@ -RentalItemAllowList.seed( :id, -# 机の貸し出し可能な団体種別 - { id: 1 , rental_item_id: 1 , group_category_id: 1 } , # 模擬店(食品) - { id: 2 , rental_item_id: 1 , group_category_id: 2 } , # 模擬店(物品) - { id: 3 , rental_item_id: 1 , group_category_id: 4 } , # 展示体験 - { id: 4 , rental_item_id: 1 , group_category_id: 5 } , # 研究室公開 - { id: 5 , rental_item_id: 1 , group_category_id: 6 } , # その他 -# 長机の貸し出し可能な団体種別 - { id: 6 , rental_item_id: 2 , group_category_id: 1 } , # 模擬店(食品) - { id: 7 , rental_item_id: 2 , group_category_id: 2 } , # 模擬店(物品) - { id: 8 , rental_item_id: 2 , group_category_id: 4 } , # 展示体験 - { id: 9 , rental_item_id: 2 , group_category_id: 5 } , # 研究室公開 - { id: 10 , rental_item_id: 2 , group_category_id: 6 } , # その他 -# 椅子の貸し出し可能な団体種別 - { id: 11 , rental_item_id: 3 , group_category_id: 1 } , # 模擬店(食品) - { id: 12 , rental_item_id: 3 , group_category_id: 2 } , # 模擬店(物品) - { id: 13 , rental_item_id: 3 , group_category_id: 3 } , # ステージ - { id: 14 , rental_item_id: 3 , group_category_id: 4 } , # 展示体験 - { id: 15 , rental_item_id: 3 , group_category_id: 5 } , # 研究室公開 - { id: 16 , rental_item_id: 3 , group_category_id: 6 } , # その他 -# パイプ椅子の貸し出し可能な団体種別 - { id: 17 , rental_item_id: 4 , group_category_id: 1 } , # 模擬店(食品) - { id: 18 , rental_item_id: 4 , group_category_id: 2 } , # 模擬店(物品) - { id: 19 , rental_item_id: 4 , group_category_id: 3 } , # ステージ - { id: 20 , rental_item_id: 4 , group_category_id: 4 } , # 展示体験 - { id: 21 , rental_item_id: 4 , group_category_id: 5 } , # 研究室公開 - { id: 22 , rental_item_id: 4 , group_category_id: 6 } , # その他 -# パーテーションの貸し出し可能な団体種別 - { id: 23 , rental_item_id: 5 , group_category_id: 1 } , # 模擬店(食品) - { id: 24 , rental_item_id: 5 , group_category_id: 2 } , # 模擬店(物品) - { id: 25 , rental_item_id: 5 , group_category_id: 3 } , # ステージ - { id: 26 , rental_item_id: 5 , group_category_id: 4 } , # 展示体験 - { id: 27 , rental_item_id: 5 , group_category_id: 5 } , # 研究室公開 - { id: 28 , rental_item_id: 5 , group_category_id: 6 } , # その他 -# 掲示板の貸し出し可能な団体種別 - { id: 29 , rental_item_id: 6 , group_category_id: 1 } , # 模擬店(食品) - { id: 30 , rental_item_id: 6 , group_category_id: 2 } , # 模擬店(物品) - { id: 31 , rental_item_id: 6 , group_category_id: 4 } , # 展示体験 - { id: 32 , rental_item_id: 6 , group_category_id: 5 } , # 研究室公開 - { id: 33 , rental_item_id: 6 , group_category_id: 6 } , # その他 -# 暗幕の貸し出し可能な団体種別 - { id: 34 , rental_item_id: 7 , group_category_id: 1 } , # 模擬店(食品) - { id: 35 , rental_item_id: 7 , group_category_id: 2 } , # 模擬店(物品) - { id: 36 , rental_item_id: 7 , group_category_id: 4 } , # 展示体験 - { id: 37 , rental_item_id: 7 , group_category_id: 5 } , # 研究室公開 - { id: 38 , rental_item_id: 7 , group_category_id: 6 } , # その他 -# マイクの貸し出し可能な団体種別 - { id: 39 , rental_item_id: 8 , group_category_id: 3 } , # ステージ -# テントの貸出可能な団体種別 - { id: 40 , rental_item_id: 10 , group_category_id: 1 } , # 模擬店(食品) - { id: 41 , rental_item_id: 10 , group_category_id: 2 } , # 模擬店(物品) - { id: 42 , rental_item_id: 10 , group_category_id: 4 } , # 展示体験 - { id: 43 , rental_item_id: 10 , group_category_id: 5 } , # 研究室公開 - { id: 44 , rental_item_id: 10 , group_category_id: 6 } , # その他 -# パーテーション足の貸し出し可能な団体種別 - { id: 45 , rental_item_id: 11 , group_category_id: 1 } , # 模擬店(食品) - { id: 46 , rental_item_id: 11 , group_category_id: 2 } , # 模擬店(物品) - { id: 47 , rental_item_id: 11 , group_category_id: 3 } , # ステージ - { id: 48 , rental_item_id: 11 , group_category_id: 4 } , # 展示体験 - { id: 49 , rental_item_id: 11 , group_category_id: 5 } , # 研究室公開 - { id: 50 , rental_item_id: 11 , group_category_id: 6 } , # その他 -) +RentalItemAllowList.seed(:id, + # 机の貸し出し可能な団体種別 + { id: 1, rental_item_id: 1, group_category_id: 1 }, # 模擬店(食品) + { id: 2, rental_item_id: 1, group_category_id: 2 }, # 模擬店(物品) + { id: 3, rental_item_id: 1, group_category_id: 4 }, # 展示体験 + { id: 4, rental_item_id: 1, group_category_id: 5 }, # 研究室公開 + { id: 5, rental_item_id: 1, group_category_id: 6 }, # その他 + # 長机の貸し出し可能な団体種別 + { id: 6, rental_item_id: 2, group_category_id: 1 }, # 模擬店(食品) + { id: 7, rental_item_id: 2, group_category_id: 2 }, # 模擬店(物品) + { id: 8, rental_item_id: 2, group_category_id: 4 }, # 展示体験 + { id: 9, rental_item_id: 2, group_category_id: 5 }, # 研究室公開 + { id: 10, rental_item_id: 2, group_category_id: 6 }, # その他 + # 椅子の貸し出し可能な団体種別 + { id: 11, rental_item_id: 3, group_category_id: 1 }, # 模擬店(食品) + { id: 12, rental_item_id: 3, group_category_id: 2 }, # 模擬店(物品) + { id: 13, rental_item_id: 3, group_category_id: 3 }, # ステージ + { id: 14, rental_item_id: 3, group_category_id: 4 }, # 展示体験 + { id: 15, rental_item_id: 3, group_category_id: 5 }, # 研究室公開 + { id: 16, rental_item_id: 3, group_category_id: 6 }, # その他 + # パイプ椅子の貸し出し可能な団体種別 + { id: 17, rental_item_id: 4, group_category_id: 1 }, # 模擬店(食品) + { id: 18, rental_item_id: 4, group_category_id: 2 }, # 模擬店(物品) + { id: 19, rental_item_id: 4, group_category_id: 3 }, # ステージ + { id: 20, rental_item_id: 4, group_category_id: 4 }, # 展示体験 + { id: 21, rental_item_id: 4, group_category_id: 5 }, # 研究室公開 + { id: 22, rental_item_id: 4, group_category_id: 6 }, # その他 + # パーテーションの貸し出し可能な団体種別 + { id: 23, rental_item_id: 5, group_category_id: 1 }, # 模擬店(食品) + { id: 24, rental_item_id: 5, group_category_id: 2 }, # 模擬店(物品) + { id: 25, rental_item_id: 5, group_category_id: 3 }, # ステージ + { id: 26, rental_item_id: 5, group_category_id: 4 }, # 展示体験 + { id: 27, rental_item_id: 5, group_category_id: 5 }, # 研究室公開 + { id: 28, rental_item_id: 5, group_category_id: 6 }, # その他 + # 掲示板の貸し出し可能な団体種別 + { id: 29, rental_item_id: 6, group_category_id: 1 }, # 模擬店(食品) + { id: 30, rental_item_id: 6, group_category_id: 2 }, # 模擬店(物品) + { id: 31, rental_item_id: 6, group_category_id: 4 }, # 展示体験 + { id: 32, rental_item_id: 6, group_category_id: 5 }, # 研究室公開 + { id: 33, rental_item_id: 6, group_category_id: 6 }, # その他 + # 暗幕の貸し出し可能な団体種別 + { id: 34, rental_item_id: 7, group_category_id: 1 }, # 模擬店(食品) + { id: 35, rental_item_id: 7, group_category_id: 2 }, # 模擬店(物品) + { id: 36, rental_item_id: 7, group_category_id: 4 }, # 展示体験 + { id: 37, rental_item_id: 7, group_category_id: 5 }, # 研究室公開 + { id: 38, rental_item_id: 7, group_category_id: 6 }, # その他 + # マイクの貸し出し可能な団体種別 + { id: 39, rental_item_id: 8, group_category_id: 3 }, # ステージ + # テントの貸出可能な団体種別 + { id: 40, rental_item_id: 10, group_category_id: 1 }, # 模擬店(食品) + { id: 41, rental_item_id: 10, group_category_id: 2 }, # 模擬店(物品) + { id: 42, rental_item_id: 10, group_category_id: 4 }, # 展示体験 + { id: 43, rental_item_id: 10, group_category_id: 5 }, # 研究室公開 + { id: 44, rental_item_id: 10, group_category_id: 6 }, # その他 + # パーテーション足の貸し出し可能な団体種別 + { id: 45, rental_item_id: 11, group_category_id: 1 }, # 模擬店(食品) + { id: 46, rental_item_id: 11, group_category_id: 2 }, # 模擬店(物品) + { id: 47, rental_item_id: 11, group_category_id: 3 }, # ステージ + { id: 48, rental_item_id: 11, group_category_id: 4 }, # 展示体験 + { id: 49, rental_item_id: 11, group_category_id: 5 }, # 研究室公開 + { id: 50, rental_item_id: 11, group_category_id: 6 }) # その他 diff --git a/api/db/fixtures/develop/rental_order.rb b/api/db/fixtures/develop/rental_order.rb index e8f84b522..cdc6cb610 100644 --- a/api/db/fixtures/develop/rental_order.rb +++ b/api/db/fixtures/develop/rental_order.rb @@ -1,6 +1,4 @@ -RentalOrder.seed( :id, - { id: 1 , group_id: 1 , - rental_item_id: 1 , - num: 10 - } -) +RentalOrder.seed(:id, + { id: 1, group_id: 1, + rental_item_id: 1, + num: 10 }) diff --git a/api/db/fixtures/develop/role.rb b/api/db/fixtures/develop/role.rb index c4de9e1af..0557c9254 100644 --- a/api/db/fixtures/develop/role.rb +++ b/api/db/fixtures/develop/role.rb @@ -1,6 +1,5 @@ -Role.seed( :id, - { id: 1, name: 'developer' }, - { id: 2, name: 'manager' }, - { id: 3, name: 'staff' }, - { id: 4, name: 'user' }, -) +Role.seed(:id, + { id: 1, name: 'developer' }, + { id: 2, name: 'manager' }, + { id: 3, name: 'staff' }, + { id: 4, name: 'user' }) diff --git a/api/db/fixtures/develop/shop.rb b/api/db/fixtures/develop/shop.rb index ba243ba18..003fa4dd3 100644 --- a/api/db/fixtures/develop/shop.rb +++ b/api/db/fixtures/develop/shop.rb @@ -1,142 +1,113 @@ -Shop.seed( :id, - { id: 1 , name: 'アピタ長岡店' , - tel: '0258-29-6111' , - opening_hours: '09:00 - 21:00' , - address: '新潟県長岡市千秋 2丁目 278 リバーサイド千秋 1F' - }, - { id: 2 , name: 'イオン長岡店' , - tel: '0258-28-0880' , - opening_hours: '07:00 - 22:00' , - address: '新潟県長岡市古正寺 1-249-1' - }, - { id: 3 , name: 'ウオロク 北山店' , - tel: '0258-25-8333' , - opening_hours: '09:00 - 22:00' , - address: '新潟県長岡市北山 3 丁目 5-1' - }, - { id: 4 , name: 'ウオロク 長岡店' , - tel: '0258-38-8800' , - opening_hours: '09:00 - 24:00' , - address: '新潟県長岡市日赤町 2丁目 6-1' - }, - { id: 5 , name: 'カトウ食材' , - tel: '0258-46-1170' , - opening_hours: '05:00 - 18:00' , - address: '新潟県長岡市新産 1丁目 1-16' - }, - { id: 6 , name: '業務スーパー 中沢店' , - tel: '0258-38-8200' , - opening_hours: '09:00 - 20:00' , - address: '新潟県長岡市美沢 3丁目 86−9' - }, - { id: 7 , name: 'サンマート' , - tel: '0258-28-1488' , - opening_hours: '10:00 - 20:00' , - address: '新潟県長岡市北山 4丁目 37-3' - }, - { id: 8 , name: 'スーパーセンタームサシ' , - tel: '0258-27-6345' , - opening_hours: '07:00 - 19:30' , - address: '新潟県長岡市古正寺町字中割 64' - }, - { id: 9 , name: 'チャレンジャー 北長岡店' , - tel: '0258-88-0050' , - opening_hours: '09:00 - 21:00' , - address: '新潟県長岡市城岡 1-1-10' - }, - { id: 10, name: 'ドン・キホーテ 長岡インター店' , - tel: '0258-46-0311' , - opening_hours: '00:00 - 03:00 10:00 - 24:00' , - address: '新潟県長岡市福山町 1078' - }, - { id: 11, name: 'ナルス 大島店' , - tel: '0258-20-5800' , - opening_hours: '09:00 - 22:00' , - address: '' - }, - { id: 12, name: 'なんじゃ村' , - tel: '0258-22-5511' , - opening_hours: '10:00 - 20:00' , - address: '新潟県長岡市喜多町 398−1' - }, - { id: 13, name: '原信 今朝白店' , - tel: '0258-39-1311' , - opening_hours: '00:00 - 24:00' , - address: '新潟県長岡市今朝白 2丁目 5' - }, - { id: 14, name: '原信 古正寺店' , - tel: '0258-28-5590' , - opening_hours: '00:00 - 24:00' , - address: '新潟県長岡市古正寺町 20-1' - }, - { id: 15, name: '原信 関原店' , - tel: '0258-46-6585' , - opening_hours: '09:00 - 22:00' , - address: '新潟県長岡市関原町 1丁目 957-1' - }, - { id: 16, name: '原信 寺島店' , - tel: '0258-28-5868' , - opening_hours: '07:00 - 24:00' , - address: '新潟県長岡市寺島町 7-1' - }, - { id: 17, name: '原信 来迎寺店' , - tel: '0258-92-2090' , - opening_hours: '09:00 - 23:00' , - address: '新潟県長岡市浦 610' - }, - { id: 18, name: 'PLANT-5 見附店' , - tel: '0258-61-4400' , - opening_hours: '09:00 - 22:00' , - address: '新潟県見附市上新田町 725-1' - }, - { id: 19, name: '三和園茶舗' , - tel: '0258-32-1105' , - opening_hours: '08:00 - 18:00' , - address: '新潟県長岡市千手 3丁目 7-8' - }, - { id: 20, name: '大和屋 本店' , - tel: '0258-35-3533' , - opening_hours: '09:00 - 17:30' , - address: '新潟県長岡市柳原町 3-3' - }, - { id: 21, name: 'やまや' , - tel: '0258-22-5066' , - opening_hours: '09:00 - 21:00' , - address: '新潟県長岡市大島新町 4-892' - }, - { id: 22, name: 'リカードコミュニケーション おぐまや' , - tel: '0258-27-0709' , - opening_hours: '08:00 - 20:00' , - address: '新潟県長岡市蓮潟 4-6-14' - }, - { id: 23, name: '良食生活館 きたまち店' , - tel: '0258-28-2855' , - opening_hours: '10:00 - 22:00' , - address: '新潟県長岡市喜多町字下川原 1000-1' - }, - { id: 24, name: '山ス流通サービス株式会社' , - tel: '0258-27-4638' , - opening_hours: '08:00 - 16:30' , - address: '新潟県長岡市喜多町 1015' - }, - { id: 25, name: '菜加' , - tel: '0258-89-2669' , - opening_hours: '08:00 - 18:00' , - address: '新潟県東川口 1939' - }, - { id: 26, name: 'ひらせい 長岡ニュータウン店' , - tel: '0258-47-8889' , - opening_hours: '09:30 - 20:00' , - address: '新潟県長岡市青葉台 1丁目甲 120-17' - }, - { id: 27, name: '紅屋重正' , - tel: '0258-32-1456' , - opening_hours: '09:00 - 17:30' , - address: '新潟県長岡市表町 1丁目 10 番地 35' - }, - { id: 28, name: 'ダイレックス喜多町店' , - tel: '0258-94-5896' , - opening_hours: '09:00 - 22:00' , - address: '新潟県長岡市喜多町土地区画整理事業内 4 街区 3' - } -) +Shop.seed(:id, + { id: 1, name: 'アピタ長岡店', + tel: '0258-29-6111', + opening_hours: '09:00 - 21:00', + address: '新潟県長岡市千秋 2丁目 278 リバーサイド千秋 1F' }, + { id: 2, name: 'イオン長岡店', + tel: '0258-28-0880', + opening_hours: '07:00 - 22:00', + address: '新潟県長岡市古正寺 1-249-1' }, + { id: 3, name: 'ウオロク 北山店', + tel: '0258-25-8333', + opening_hours: '09:00 - 22:00', + address: '新潟県長岡市北山 3 丁目 5-1' }, + { id: 4, name: 'ウオロク 長岡店', + tel: '0258-38-8800', + opening_hours: '09:00 - 24:00', + address: '新潟県長岡市日赤町 2丁目 6-1' }, + { id: 5, name: 'カトウ食材', + tel: '0258-46-1170', + opening_hours: '05:00 - 18:00', + address: '新潟県長岡市新産 1丁目 1-16' }, + { id: 6, name: '業務スーパー 中沢店', + tel: '0258-38-8200', + opening_hours: '09:00 - 20:00', + address: '新潟県長岡市美沢 3丁目 86−9' }, + { id: 7, name: 'サンマート', + tel: '0258-28-1488', + opening_hours: '10:00 - 20:00', + address: '新潟県長岡市北山 4丁目 37-3' }, + { id: 8, name: 'スーパーセンタームサシ', + tel: '0258-27-6345', + opening_hours: '07:00 - 19:30', + address: '新潟県長岡市古正寺町字中割 64' }, + { id: 9, name: 'チャレンジャー 北長岡店', + tel: '0258-88-0050', + opening_hours: '09:00 - 21:00', + address: '新潟県長岡市城岡 1-1-10' }, + { id: 10, name: 'ドン・キホーテ 長岡インター店', + tel: '0258-46-0311', + opening_hours: '00:00 - 03:00 10:00 - 24:00', + address: '新潟県長岡市福山町 1078' }, + { id: 11, name: 'ナルス 大島店', + tel: '0258-20-5800', + opening_hours: '09:00 - 22:00', + address: '' }, + { id: 12, name: 'なんじゃ村', + tel: '0258-22-5511', + opening_hours: '10:00 - 20:00', + address: '新潟県長岡市喜多町 398−1' }, + { id: 13, name: '原信 今朝白店', + tel: '0258-39-1311', + opening_hours: '00:00 - 24:00', + address: '新潟県長岡市今朝白 2丁目 5' }, + { id: 14, name: '原信 古正寺店', + tel: '0258-28-5590', + opening_hours: '00:00 - 24:00', + address: '新潟県長岡市古正寺町 20-1' }, + { id: 15, name: '原信 関原店', + tel: '0258-46-6585', + opening_hours: '09:00 - 22:00', + address: '新潟県長岡市関原町 1丁目 957-1' }, + { id: 16, name: '原信 寺島店', + tel: '0258-28-5868', + opening_hours: '07:00 - 24:00', + address: '新潟県長岡市寺島町 7-1' }, + { id: 17, name: '原信 来迎寺店', + tel: '0258-92-2090', + opening_hours: '09:00 - 23:00', + address: '新潟県長岡市浦 610' }, + { id: 18, name: 'PLANT-5 見附店', + tel: '0258-61-4400', + opening_hours: '09:00 - 22:00', + address: '新潟県見附市上新田町 725-1' }, + { id: 19, name: '三和園茶舗', + tel: '0258-32-1105', + opening_hours: '08:00 - 18:00', + address: '新潟県長岡市千手 3丁目 7-8' }, + { id: 20, name: '大和屋 本店', + tel: '0258-35-3533', + opening_hours: '09:00 - 17:30', + address: '新潟県長岡市柳原町 3-3' }, + { id: 21, name: 'やまや', + tel: '0258-22-5066', + opening_hours: '09:00 - 21:00', + address: '新潟県長岡市大島新町 4-892' }, + { id: 22, name: 'リカードコミュニケーション おぐまや', + tel: '0258-27-0709', + opening_hours: '08:00 - 20:00', + address: '新潟県長岡市蓮潟 4-6-14' }, + { id: 23, name: '良食生活館 きたまち店', + tel: '0258-28-2855', + opening_hours: '10:00 - 22:00', + address: '新潟県長岡市喜多町字下川原 1000-1' }, + { id: 24, name: '山ス流通サービス株式会社', + tel: '0258-27-4638', + opening_hours: '08:00 - 16:30', + address: '新潟県長岡市喜多町 1015' }, + { id: 25, name: '菜加', + tel: '0258-89-2669', + opening_hours: '08:00 - 18:00', + address: '新潟県東川口 1939' }, + { id: 26, name: 'ひらせい 長岡ニュータウン店', + tel: '0258-47-8889', + opening_hours: '09:30 - 20:00', + address: '新潟県長岡市青葉台 1丁目甲 120-17' }, + { id: 27, name: '紅屋重正', + tel: '0258-32-1456', + opening_hours: '09:00 - 17:30', + address: '新潟県長岡市表町 1丁目 10 番地 35' }, + { id: 28, name: 'ダイレックス喜多町店', + tel: '0258-94-5896', + opening_hours: '09:00 - 22:00', + address: '新潟県長岡市喜多町土地区画整理事業内 4 街区 3' }) diff --git a/api/db/fixtures/develop/stage.rb b/api/db/fixtures/develop/stage.rb index bf934cbed..95826192a 100644 --- a/api/db/fixtures/develop/stage.rb +++ b/api/db/fixtures/develop/stage.rb @@ -1,7 +1,6 @@ -Stage.seed( :id, - { id: 1, name: '希望なし' , enable_sunny: true, enable_rainy: true }, - { id: 2, name: 'メインステージ' , enable_sunny: true, enable_rainy: false }, - { id: 3, name: '体育館' , enable_sunny: true, enable_rainy: true }, - { id: 4, name: 'マルチメディアセンター' , enable_sunny: true, enable_rainy: true }, - { id: 5, name: '武道館' , enable_sunny: true, enable_rainy: true }, -) +Stage.seed(:id, + { id: 1, name: '希望なし', enable_sunny: true, enable_rainy: true }, + { id: 2, name: 'メインステージ', enable_sunny: true, enable_rainy: false }, + { id: 3, name: '体育館', enable_sunny: true, enable_rainy: true }, + { id: 4, name: 'マルチメディアセンター', enable_sunny: true, enable_rainy: true }, + { id: 5, name: '武道館', enable_sunny: true, enable_rainy: true }) diff --git a/api/db/fixtures/develop/stage_common_option.rb b/api/db/fixtures/develop/stage_common_option.rb index 6db525354..bac5b3963 100644 --- a/api/db/fixtures/develop/stage_common_option.rb +++ b/api/db/fixtures/develop/stage_common_option.rb @@ -1,8 +1,6 @@ -StageCommonOption.seed( :id, - { id: 1 , group_id: 1 , - own_equipment: true , - bgm: true , - camera_permission: true , - loud_sound: true - } -) \ No newline at end of file +StageCommonOption.seed(:id, + { id: 1, group_id: 1, + own_equipment: true, + bgm: true, + camera_permission: true, + loud_sound: true }) diff --git a/api/db/fixtures/develop/stage_order.rb b/api/db/fixtures/develop/stage_order.rb index d04da8f65..3c44c090b 100644 --- a/api/db/fixtures/develop/stage_order.rb +++ b/api/db/fixtures/develop/stage_order.rb @@ -1,15 +1,13 @@ -StageOrder.seed( :id, - { id: 1, group_id: 1, - is_sunny: true, - fes_date_id: 1, - stage_first: 1, - stage_second: 2, - use_time_interval: '5分', - prepare_time_interval: '5分', - cleanup_time_interval: '5分', - prepare_start_time: '12:30', - performance_start_time: '13:00', - performance_end_time: '13:30', - cleanup_end_time: '14:00' - } -) +StageOrder.seed(:id, + { id: 1, group_id: 1, + is_sunny: true, + fes_date_id: 1, + stage_first: 1, + stage_second: 2, + use_time_interval: '5分', + prepare_time_interval: '5分', + cleanup_time_interval: '5分', + prepare_start_time: '12:30', + performance_start_time: '13:00', + performance_end_time: '13:30', + cleanup_end_time: '14:00' }) diff --git a/api/db/fixtures/develop/stocker_item.rb b/api/db/fixtures/develop/stocker_item.rb index 2bf609fc6..e1beaf289 100644 --- a/api/db/fixtures/develop/stocker_item.rb +++ b/api/db/fixtures/develop/stocker_item.rb @@ -1,17 +1,13 @@ -StockerItem.seed( :id, - { id: 1, rental_item_id: 1 , - stocker_place_id: 1 , - fes_year_id: 1 , - num: 1 - }, - { id: 2, rental_item_id: 2 , - stocker_place_id: 1 , - fes_year_id: 1 , - num: 1 - }, - { id: 3, rental_item_id: 1 , - stocker_place_id: 2, - fes_year_id: 1 , - num: 1 - }, -) +StockerItem.seed(:id, + { id: 1, rental_item_id: 1, + stocker_place_id: 1, + fes_year_id: 1, + num: 1 }, + { id: 2, rental_item_id: 2, + stocker_place_id: 1, + fes_year_id: 1, + num: 1 }, + { id: 3, rental_item_id: 1, + stocker_place_id: 2, + fes_year_id: 1, + num: 1 }) diff --git a/api/db/fixtures/develop/stocker_place.rb b/api/db/fixtures/develop/stocker_place.rb index 1d9e4dece..5bf21a14e 100644 --- a/api/db/fixtures/develop/stocker_place.rb +++ b/api/db/fixtures/develop/stocker_place.rb @@ -1,70 +1,69 @@ -StockerPlace.seed( :id, - { id: 1 , name: '講義棟101', stock_item_status: 1, assign_item_status: 1 } , - { id: 2 , name: '講義棟102', stock_item_status: 1, assign_item_status: 1 } , - { id: 3 , name: '講義棟103', stock_item_status: 1, assign_item_status: 1 } , - { id: 4 , name: '講義棟104', stock_item_status: 1, assign_item_status: 1 } , - { id: 5 , name: '講義棟105', stock_item_status: 1, assign_item_status: 1 } , - { id: 6 , name: '講義棟106', stock_item_status: 1, assign_item_status: 1 } , - { id: 7 , name: '講義棟201', stock_item_status: 1, assign_item_status: 1 } , - { id: 8 , name: '講義棟202', stock_item_status: 1, assign_item_status: 1 } , - { id: 9 , name: '講義棟203', stock_item_status: 1, assign_item_status: 1 } , - { id: 10 , name: '講義棟204', stock_item_status: 1, assign_item_status: 1 } , - { id: 11 , name: '講義棟205', stock_item_status: 1, assign_item_status: 1 } , - { id: 12 , name: '講義棟206', stock_item_status: 1, assign_item_status: 1 } , - { id: 13 , name: '講義棟207', stock_item_status: 1, assign_item_status: 1 } , - { id: 14 , name: '講義棟208', stock_item_status: 1, assign_item_status: 1 } , - { id: 15 , name: '講義棟209', stock_item_status: 1, assign_item_status: 1 } , - { id: 16 , name: '講義棟210', stock_item_status: 1, assign_item_status: 1 } , - { id: 17 , name: '講義棟301', stock_item_status: 1, assign_item_status: 1 } , - { id: 18 , name: '講義棟302', stock_item_status: 1, assign_item_status: 1 } , - { id: 19 , name: '講義棟303', stock_item_status: 1, assign_item_status: 1 } , - { id: 20 , name: '講義棟304', stock_item_status: 1, assign_item_status: 1 } , - { id: 21 , name: '講義棟305', stock_item_status: 1, assign_item_status: 1 } , - { id: 22 , name: '講義棟306', stock_item_status: 1, assign_item_status: 1 } , - { id: 23 , name: '総合研究棟101', stock_item_status: 1, assign_item_status: 1 } , - { id: 24 , name: '総合研究棟102', stock_item_status: 1, assign_item_status: 1 } , - { id: 25 , name: '総合研究棟103', stock_item_status: 1, assign_item_status: 1 } , - { id: 26 , name: '総合研究棟104', stock_item_status: 1, assign_item_status: 1 } , - { id: 27 , name: '総合研究棟105', stock_item_status: 1, assign_item_status: 1 } , - { id: 28 , name: '総合研究棟106', stock_item_status: 1, assign_item_status: 1 } , - { id: 29 , name: '物材情経棟210', stock_item_status: 1, assign_item_status: 1 } , - { id: 30 , name: '物材情経棟601-602', stock_item_status:1, assign_item_status: 1 } , - { id: 31 , name: '物材情経棟603-604', stock_item_status:1, assign_item_status: 1 } , - { id: 32 , name: '物材情経棟604-604', stock_item_status:1, assign_item_status: 1 } , - { id: 33 , name: '物材情経棟605-606', stock_item_status:1, assign_item_status: 1 } , - { id: 34 , name: '電気棟101', stock_item_status: 1, assign_item_status: 1 } , - { id: 35 , name: '電気棟102', stock_item_status: 1, assign_item_status: 1 } , - { id: 36 , name: '電気棟103', stock_item_status: 1, assign_item_status: 1 } , - { id: 37 , name: '電気棟104', stock_item_status: 1, assign_item_status: 1 } , - { id: 38 , name: '電気棟204', stock_item_status: 1, assign_item_status: 1 } , - { id: 39 , name: '電気棟206', stock_item_status: 1, assign_item_status: 1 } , - { id: 40 , name: '電気棟208', stock_item_status: 1, assign_item_status: 1 } , - { id: 41 , name: '電気棟212', stock_item_status: 1, assign_item_status: 1 } , - { id: 42 , name: '電気棟310', stock_item_status: 1, assign_item_status: 1 } , - { id: 43 , name: '機械棟101', stock_item_status: 1, assign_item_status: 1 } , - { id: 44 , name: '機械棟103', stock_item_status: 1, assign_item_status: 1 } , - { id: 45 , name: '機械棟105', stock_item_status: 1, assign_item_status: 1 } , - { id: 46 , name: '機械棟201', stock_item_status: 1, assign_item_status: 1 } , - { id: 47 , name: '機械棟204', stock_item_status: 1, assign_item_status: 1 } , - { id: 48 , name: '生物棟260', stock_item_status: 1, assign_item_status: 1 } , - { id: 49 , name: '生物棟459', stock_item_status: 1, assign_item_status: 1 } , - { id: 50 , name: '生物棟465', stock_item_status: 1, assign_item_status: 1 } , - { id: 51 , name: '生物棟466', stock_item_status: 1, assign_item_status: 1 } , - { id: 52 , name: 'AL3', stock_item_status: 1, assign_item_status: 1 } , - { id: 53 , name: 'D講義室', stock_item_status: 1, assign_item_status: 1 } , - { id: 54 , name: '体育館', stock_item_status: 1, assign_item_status: 1 } , - { id: 55 , name: '廃液処理施設', stock_item_status: 1, assign_item_status: 1 } , - { id: 56 , name: '課外活動共用施設', stock_item_status: 1, assign_item_status: 1 } , - { id: 57 , name: 'セコムホール(北側倉庫)', stock_item_status: 1, assign_item_status: 1 } , - { id: 58 , name: 'セコムホール(入口側倉庫)', stock_item_status: 1, assign_item_status: 1 } , - { id: 59 , name: '本部(福利棟)', stock_item_status: 1, assign_item_status: 1 }, - { id: 60 , name: 'セコム会議室', stock_item_status: 1, assign_item_status: 1 } , - { id: 61 , name: '24下倉庫', stock_item_status: 1, assign_item_status: 1 } , - { id: 62 , name: 'グラウンド器具庫', stock_item_status: 1, assign_item_status: 1 } , - { id: 63 , name: '116倉庫', stock_item_status: 1, assign_item_status: 1 } , - { id: 64 , name: '入試課倉庫', stock_item_status: 1, assign_item_status: 1 } , - { id: 65 , name: '地域防災実践研究センター', stock_item_status: 1, assign_item_status: 1 } , - { id: 66 , name: '施設課', stock_item_status: 1, assign_item_status: 1 } , - { id: 67 , name: '電気棟事務室', stock_item_status: 1, assign_item_status: 1 } , - { id: 68 , name: '機械棟事務室', stock_item_status: 1, assign_item_status: 1 } , -) +StockerPlace.seed(:id, + { id: 1, name: '講義棟101', stock_item_status: 1, assign_item_status: 1 }, + { id: 2, name: '講義棟102', stock_item_status: 1, assign_item_status: 1 }, + { id: 3, name: '講義棟103', stock_item_status: 1, assign_item_status: 1 }, + { id: 4, name: '講義棟104', stock_item_status: 1, assign_item_status: 1 }, + { id: 5, name: '講義棟105', stock_item_status: 1, assign_item_status: 1 }, + { id: 6, name: '講義棟106', stock_item_status: 1, assign_item_status: 1 }, + { id: 7, name: '講義棟201', stock_item_status: 1, assign_item_status: 1 }, + { id: 8, name: '講義棟202', stock_item_status: 1, assign_item_status: 1 }, + { id: 9, name: '講義棟203', stock_item_status: 1, assign_item_status: 1 }, + { id: 10, name: '講義棟204', stock_item_status: 1, assign_item_status: 1 }, + { id: 11, name: '講義棟205', stock_item_status: 1, assign_item_status: 1 }, + { id: 12, name: '講義棟206', stock_item_status: 1, assign_item_status: 1 }, + { id: 13, name: '講義棟207', stock_item_status: 1, assign_item_status: 1 }, + { id: 14, name: '講義棟208', stock_item_status: 1, assign_item_status: 1 }, + { id: 15, name: '講義棟209', stock_item_status: 1, assign_item_status: 1 }, + { id: 16, name: '講義棟210', stock_item_status: 1, assign_item_status: 1 }, + { id: 17, name: '講義棟301', stock_item_status: 1, assign_item_status: 1 }, + { id: 18, name: '講義棟302', stock_item_status: 1, assign_item_status: 1 }, + { id: 19, name: '講義棟303', stock_item_status: 1, assign_item_status: 1 }, + { id: 20, name: '講義棟304', stock_item_status: 1, assign_item_status: 1 }, + { id: 21, name: '講義棟305', stock_item_status: 1, assign_item_status: 1 }, + { id: 22, name: '講義棟306', stock_item_status: 1, assign_item_status: 1 }, + { id: 23, name: '総合研究棟101', stock_item_status: 1, assign_item_status: 1 }, + { id: 24, name: '総合研究棟102', stock_item_status: 1, assign_item_status: 1 }, + { id: 25, name: '総合研究棟103', stock_item_status: 1, assign_item_status: 1 }, + { id: 26, name: '総合研究棟104', stock_item_status: 1, assign_item_status: 1 }, + { id: 27, name: '総合研究棟105', stock_item_status: 1, assign_item_status: 1 }, + { id: 28, name: '総合研究棟106', stock_item_status: 1, assign_item_status: 1 }, + { id: 29, name: '物材情経棟210', stock_item_status: 1, assign_item_status: 1 }, + { id: 30, name: '物材情経棟601-602', stock_item_status: 1, assign_item_status: 1 }, + { id: 31, name: '物材情経棟603-604', stock_item_status: 1, assign_item_status: 1 }, + { id: 32, name: '物材情経棟604-604', stock_item_status: 1, assign_item_status: 1 }, + { id: 33, name: '物材情経棟605-606', stock_item_status: 1, assign_item_status: 1 }, + { id: 34, name: '電気棟101', stock_item_status: 1, assign_item_status: 1 }, + { id: 35, name: '電気棟102', stock_item_status: 1, assign_item_status: 1 }, + { id: 36, name: '電気棟103', stock_item_status: 1, assign_item_status: 1 }, + { id: 37, name: '電気棟104', stock_item_status: 1, assign_item_status: 1 }, + { id: 38, name: '電気棟204', stock_item_status: 1, assign_item_status: 1 }, + { id: 39, name: '電気棟206', stock_item_status: 1, assign_item_status: 1 }, + { id: 40, name: '電気棟208', stock_item_status: 1, assign_item_status: 1 }, + { id: 41, name: '電気棟212', stock_item_status: 1, assign_item_status: 1 }, + { id: 42, name: '電気棟310', stock_item_status: 1, assign_item_status: 1 }, + { id: 43, name: '機械棟101', stock_item_status: 1, assign_item_status: 1 }, + { id: 44, name: '機械棟103', stock_item_status: 1, assign_item_status: 1 }, + { id: 45, name: '機械棟105', stock_item_status: 1, assign_item_status: 1 }, + { id: 46, name: '機械棟201', stock_item_status: 1, assign_item_status: 1 }, + { id: 47, name: '機械棟204', stock_item_status: 1, assign_item_status: 1 }, + { id: 48, name: '生物棟260', stock_item_status: 1, assign_item_status: 1 }, + { id: 49, name: '生物棟459', stock_item_status: 1, assign_item_status: 1 }, + { id: 50, name: '生物棟465', stock_item_status: 1, assign_item_status: 1 }, + { id: 51, name: '生物棟466', stock_item_status: 1, assign_item_status: 1 }, + { id: 52, name: 'AL3', stock_item_status: 1, assign_item_status: 1 }, + { id: 53, name: 'D講義室', stock_item_status: 1, assign_item_status: 1 }, + { id: 54, name: '体育館', stock_item_status: 1, assign_item_status: 1 }, + { id: 55, name: '廃液処理施設', stock_item_status: 1, assign_item_status: 1 }, + { id: 56, name: '課外活動共用施設', stock_item_status: 1, assign_item_status: 1 }, + { id: 57, name: 'セコムホール(北側倉庫)', stock_item_status: 1, assign_item_status: 1 }, + { id: 58, name: 'セコムホール(入口側倉庫)', stock_item_status: 1, assign_item_status: 1 }, + { id: 59, name: '本部(福利棟)', stock_item_status: 1, assign_item_status: 1 }, + { id: 60, name: 'セコム会議室', stock_item_status: 1, assign_item_status: 1 }, + { id: 61, name: '24下倉庫', stock_item_status: 1, assign_item_status: 1 }, + { id: 62, name: 'グラウンド器具庫', stock_item_status: 1, assign_item_status: 1 }, + { id: 63, name: '116倉庫', stock_item_status: 1, assign_item_status: 1 }, + { id: 64, name: '入試課倉庫', stock_item_status: 1, assign_item_status: 1 }, + { id: 65, name: '地域防災実践研究センター', stock_item_status: 1, assign_item_status: 1 }, + { id: 66, name: '施設課', stock_item_status: 1, assign_item_status: 1 }, + { id: 67, name: '電気棟事務室', stock_item_status: 1, assign_item_status: 1 }, + { id: 68, name: '機械棟事務室', stock_item_status: 1, assign_item_status: 1 }) diff --git a/api/db/fixtures/develop/stool_test.rb b/api/db/fixtures/develop/stool_test.rb index 8baad4477..ab6b83e34 100644 --- a/api/db/fixtures/develop/stool_test.rb +++ b/api/db/fixtures/develop/stool_test.rb @@ -1,5 +1,4 @@ -StoolTest.seed( :id, - { id: 1, status: '検便準備中' }, - { id: 2, status: '検便無' }, - { id: 3, status: '検便有' }, -) +StoolTest.seed(:id, + { id: 1, status: '検便準備中' }, + { id: 2, status: '検便無' }, + { id: 3, status: '検便有' }) diff --git a/api/db/fixtures/develop/sub_rep.rb b/api/db/fixtures/develop/sub_rep.rb index 44b0d6429..13f602d4e 100644 --- a/api/db/fixtures/develop/sub_rep.rb +++ b/api/db/fixtures/develop/sub_rep.rb @@ -1,130 +1,113 @@ -SubRep.seed( :id, - { id: 1 , group_id: 1 , - name: "技大花子" , - department_id: 1 , - grade_id: 1 , - tel: "111-2222-3333" , - email: "nutfes-hanako@email.com" , - student_id: 11222333 - }, - { id: 2 , group_id: 2 , - name: "長岡太郎" , - department_id: 1 , - grade_id: 1 , - tel: "011-2222-3333" , - email: "nutfes-nagaoka@email.com" , - student_id: 01222333 - }, - { id: 3 , group_id: 3 , - name: "新潟太郎" , - department_id: 1 , - grade_id: 2 , - tel: "001-2222-3333" , - email: "nutfes-nigata@email.com" , - student_id: 10222333 - }, - { id: 4 , group_id: 4 , - name: "福島太郎" , - department_id: 1 , - grade_id: 4 , - tel: "000-2222-3333" , - email: "nutfes-fukushima@email.com" , - student_id: 11022333 - }, - { id: 5 , group_id: 5 , - name: "山形太郎" , - department_id: 1 , - grade_id: 5 , - tel: "000-0222-3333" , - email: "nutfes-yamagata@email.com" , - student_id: 11032333 - }, - { id: 6 , group_id: 6 , - name: "群馬太郎" , - department_id: 1 , - grade_id: 3 , - tel: "000-0222-3133" , - email: "nutfes-gunma@email.com" , - student_id: 11032334 - }, - { id: 7 , group_id: 7 , - name: "長野太郎" , - department_id: 1 , - grade_id: 8 , - tel: "000-0222-3193" , - email: "nutfes-nagano@email.com" , - student_id: 11030334 - }, - { id: 8 , group_id: 8 , - name: "長野太郎" , - department_id: 1 , - grade_id: 4 , - tel: "002-2678-3193" , - email: "nutfes-nagano@email.com" , - student_id: 11039934 - }, - { id: 9 , group_id: 9 , - name: "東京太郎" , - department_id: 1 , - grade_id: 2 , - tel: "002-0222-3193" , - email: "nutfes-tokyo@email.com" , - student_id: 12039934 - }, - { id: 10 , group_id: 10 , - name: "鹿児島太郎" , - department_id: 1 , - grade_id: 1 , - tel: "002-0262-3193" , - email: "nutfes-kagoshima@email.com" , - student_id: 12039634 - }, - { id: 11 , group_id: 11, - name: "岐阜太郎" , - department_id: 1 , - grade_id: 2 , - tel: "002-0987-3193" , - email: "nutfes-gihu@email.com" , - student_id: 12039634 - }, - { id: 12 , group_id: 12, - name: "茨城太郎" , - department_id: 1 , - grade_id: 2 , - tel: "602-0987-3193" , - email: "nutfes-ibaraki@email.com" , - student_id: 12039754 - }, - { id: 13 , group_id: 13, - name: "栃木太郎" , - department_id: 1 , - grade_id: 2 , - tel: "606-0987-3193" , - email: "nutfes-tochigi@email.com" , - student_id: 12009724 - }, - { id: 14 , group_id: 14, - name: "神奈川太郎" , - department_id: 1 , - grade_id: 7 , - tel: "606-0987-2193" , - email: "nutfes-kanagawa@email.com" , - student_id: 12145724 - }, - { id: 15 , group_id: 15, - name: "兵庫太郎" , - department_id: 1 , - grade_id: 7 , - tel: "606-0987-2183" , - email: "nutfes-hyougo@email.com" , - student_id: 12144324 - }, - { id: 16 , group_id: 16, - name: "愛知太郎" , - department_id: 1 , - grade_id: 4 , - tel: "606-0087-2183" , - email: "nutfes-aichi@email.com" , - student_id: 12149904 - }, -) +SubRep.seed(:id, + { id: 1, group_id: 1, + name: '技大花子', + department_id: 1, + grade_id: 1, + tel: '111-2222-3333', + email: 'nutfes-hanako@email.com', + student_id: 11_222_333 }, + { id: 2, group_id: 2, + name: '長岡太郎', + department_id: 1, + grade_id: 1, + tel: '011-2222-3333', + email: 'nutfes-nagaoka@email.com', + student_id: 0o1222333 }, + { id: 3, group_id: 3, + name: '新潟太郎', + department_id: 1, + grade_id: 2, + tel: '001-2222-3333', + email: 'nutfes-nigata@email.com', + student_id: 10_222_333 }, + { id: 4, group_id: 4, + name: '福島太郎', + department_id: 1, + grade_id: 4, + tel: '000-2222-3333', + email: 'nutfes-fukushima@email.com', + student_id: 11_022_333 }, + { id: 5, group_id: 5, + name: '山形太郎', + department_id: 1, + grade_id: 5, + tel: '000-0222-3333', + email: 'nutfes-yamagata@email.com', + student_id: 11_032_333 }, + { id: 6, group_id: 6, + name: '群馬太郎', + department_id: 1, + grade_id: 3, + tel: '000-0222-3133', + email: 'nutfes-gunma@email.com', + student_id: 11_032_334 }, + { id: 7, group_id: 7, + name: '長野太郎', + department_id: 1, + grade_id: 8, + tel: '000-0222-3193', + email: 'nutfes-nagano@email.com', + student_id: 11_030_334 }, + { id: 8, group_id: 8, + name: '長野太郎', + department_id: 1, + grade_id: 4, + tel: '002-2678-3193', + email: 'nutfes-nagano@email.com', + student_id: 11_039_934 }, + { id: 9, group_id: 9, + name: '東京太郎', + department_id: 1, + grade_id: 2, + tel: '002-0222-3193', + email: 'nutfes-tokyo@email.com', + student_id: 12_039_934 }, + { id: 10, group_id: 10, + name: '鹿児島太郎', + department_id: 1, + grade_id: 1, + tel: '002-0262-3193', + email: 'nutfes-kagoshima@email.com', + student_id: 12_039_634 }, + { id: 11, group_id: 11, + name: '岐阜太郎', + department_id: 1, + grade_id: 2, + tel: '002-0987-3193', + email: 'nutfes-gihu@email.com', + student_id: 12_039_634 }, + { id: 12, group_id: 12, + name: '茨城太郎', + department_id: 1, + grade_id: 2, + tel: '602-0987-3193', + email: 'nutfes-ibaraki@email.com', + student_id: 12_039_754 }, + { id: 13, group_id: 13, + name: '栃木太郎', + department_id: 1, + grade_id: 2, + tel: '606-0987-3193', + email: 'nutfes-tochigi@email.com', + student_id: 12_009_724 }, + { id: 14, group_id: 14, + name: '神奈川太郎', + department_id: 1, + grade_id: 7, + tel: '606-0987-2193', + email: 'nutfes-kanagawa@email.com', + student_id: 12_145_724 }, + { id: 15, group_id: 15, + name: '兵庫太郎', + department_id: 1, + grade_id: 7, + tel: '606-0987-2183', + email: 'nutfes-hyougo@email.com', + student_id: 12_144_324 }, + { id: 16, group_id: 16, + name: '愛知太郎', + department_id: 1, + grade_id: 4, + tel: '606-0087-2183', + email: 'nutfes-aichi@email.com', + student_id: 12_149_904 }) diff --git a/api/db/fixtures/develop/user.rb b/api/db/fixtures/develop/user.rb index 919c63bf6..ce66c39d9 100644 --- a/api/db/fixtures/develop/user.rb +++ b/api/db/fixtures/develop/user.rb @@ -1,722 +1,601 @@ -User.seed( :id, - { id: 1 , name: '技大太朗(dev)' , - email: 'nutfes-taro@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 2 , name: '技大次郎(mng)' , - email: 'nutfes-jiro@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 3 , name: '技大三郎(usr)' , - email: 'nutfes-saburo@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 4 , name: '平内隆太(dev)' , - email: 'nutfes-heinai-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 5 , name: 'デラロサ(mng)' , - email: 'nutfes-derarosa-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 6 , name: 'サンチェス(usr)' , - email: 'nutfes-sachece-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 7 , name: '大竹寛(dev)' , - email: 'nutfes-otake-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 8 , name: '菅野智之(mng)' , - email: 'nutfes-sugano-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 9 , name: '山崎伊織(usr)' , - email: 'nutfes-yamasaki-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 10 , name: '戸郷翔征(dev)' , - email: 'nutfes-togou-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 11 , name: '伊納正一(mng)' , - email: 'nutfes-inou-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 12 , name: '野上亮磨(usr)' , - email: 'nutfes-nogami-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 13 , name: '今村信貴(dev)' , - email: 'nutfes-imamura-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 14 , name: '鍵谷陽平(mng)' , - email: 'nutfes-kagiya-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 15 , name: '太田龍(usr)' , - email: 'nutfes-oota-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 16 , name: '桜井俊貴(dev)' , - email: 'nutfes-sakurai-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 17 , name: '中川浩太(mng)' , - email: 'nutfes-nakagawa-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 18 , name: 'メルセデス(usr)' , - email: 'nutfes-mercededes-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 19 , name: '畠世周(dev)' , - email: 'nutfes-hatake-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 20 , name: '桑原拓也(mng)' , - email: 'nutfes-kuwahara-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 21 , name: '高橋優貴(usr)' , - email: 'nutfes-takahashi-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 22 , name: 'ビエイラ(dev)' , - email: 'nutfes-vieira-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 23 , name: '利根千秋(mng)' , - email: 'nutfes-tone-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 24 , name: '高梨雄平(usr)' , - email: 'nutfes-takanashi-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 25 , name: '直江大輔(dev)' , - email: 'nutfes-naoe-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 26 , name: '伊藤雄輔(mng)' , - email: 'nutfes-itoh-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 27 , name: '高木涼介(usr)' , - email: 'nutfes-takagi-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 28 , name: '山本一樹(dev)' , - email: 'nutfes-yamamoto-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 29 , name: '田中智樹(mng)' , - email: 'nutfes-tanaka-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 30 , name: '横川鋼(usr)' , - email: 'nutfes-yokokawa-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 31 , name: '古川有利(dev)' , - email: 'nutfes-furukawa-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 32 , name: '大江竜聖(mng)' , - email: 'nutfes-ooe-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 33 , name: '戸田夏樹(usr)' , - email: 'nutfes-toda-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 34 , name: '井上雄大(dev)' , - email: 'nutfes-inoue-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 35 , name: '沼田正平(mng)' , - email: 'nutfes-numata-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 36 , name: '堀岡隼人(usr)' , - email: 'nutfes-horioka-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 37 , name: '山口俊(dev)' , - email: 'nutfes-yamaguchi-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 38 , name: '小林誠司(mng)' , - email: 'nutfes-kobayashi-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 39 , name: '大城卓三(usr)' , - email: 'nutfes-oshiro-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 40 , name: '炭谷銀次郎(dev)' , - email: 'nutfes-sumitani-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 41 , name: '岸田之則(mng)' , - email: 'nutfes-kishida-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 42 , name: '山瀬慎之介(usr)' , - email: 'nutfes-yamase-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 43 , name: '荻原哲(dev)' , - email: 'nutfes-ogiwara-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 44 , name: '喜多涼介(mng)' , - email: 'nutfes-kita-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 45 , name: '湯浅大(usr)' , - email: 'nutfes-yuasa-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 46 , name: '増田大樹(dev)' , - email: 'nutfes-masuda-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 47 , name: '中島博之(mng)' , - email: 'nutfes-nakashima-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 48 , name: '坂本勇人(usr)' , - email: 'nutfes-sakamoto-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 49 , name: '中田翔(dev)' , - email: 'nutfes-nakata-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 50 , name: 'スモーク(mng)' , - email: 'nutfes-sumoku-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 51 , name: '岡本和馬(usr)' , - email: 'nutfes-okamoto-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 52 , name: '吉川尚樹(dev)' , - email: 'nutfes-yodhikawa-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 53 , name: '廣川大志(mng)' , - email: 'nutfes-hiroka-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 54 , name: '若林晃弘(usr)' , - email: 'nutfes-wakabayashi-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 55 , name: '中山礼都(dev)' , - email: 'nutfes-nakayama-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 56 , name: 'ウィーラー(mng)' , - email: 'nutfes-weeler-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 57 , name: '北村拓海(usr)' , - email: 'nutfes-kitamura-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 58 , name: '山下耕太(dev)' , - email: 'nutfes-yamashita-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 59 , name: '菊田博和(mng)' , - email: 'nutfes-kikuta-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 60 , name: '増田隆(usr)' , - email: 'nutfes-masuda2-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 61 , name: '松井義光(dev)' , - email: 'nutfes-matsui-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 62 , name: '香月一也(mng)' , - email: 'nutfes-katsuki-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 63 , name: '秋広優斗(usr)' , - email: 'nutfes-akihiro-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 64 , name: '平間隼人(dev)' , - email: 'nutfes-hirama-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 65 , name: '煬帝寛(mng)' , - email: 'nutfes-yoh-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 66 , name: '丸佳浩(usr)' , - email: 'nutfes-maru-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 67 , name: '亀井義行(dev)' , - email: 'nutfes-kamei-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 68 , name: '梶谷孝之(mng)' , - email: 'nutfes-kaziya-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 69 , name: '松原誠也(usr)' , - email: 'nutfes-matsubara-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 70 , name: '石川慎吾(dev)' , - email: 'nutfes-ishikawa-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 71 , name: '立川総一郎(mng)' , - email: 'nutfes-tachikawa-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 72 , name: '重信慎之介(usr)' , - email: 'nutfes-shigenobu-g@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 73 , name: '岩崎優(dev)' , - email: 'nutfes-iwasaki-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 74 , name: '西純也(mng)' , - email: 'nutfes-nishi1-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 75 , name: '西勇気(usr)' , - email: 'nutfes-nishi2-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 76 , name: '岩貞雄太(dev)' , - email: 'nutfes-iwasada-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 77 , name: '馬場康介(mng)' , - email: 'nutfes-baba-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 78 , name: '藤波慎太郎(usr)' , - email: 'nutfes-fujinami-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 79 , name: '中田健一(dev)' , - email: 'nutfes-nakata-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 80 , name: '岩田実(mng)' , - email: 'nutfes-iwata-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 81 , name: '伊藤将司(usr)' , - email: 'nutfes-itoh-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 82 , name: '小野大紀(dev)' , - email: 'nutfes-ono-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 83 , name: '高橋はると(mng)' , - email: 'nutfes-takahashi-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 84 , name: '片山裕也(usr)' , - email: 'nutfes-katayama-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 85 , name: '島田海里(dev)' , - email: 'nutfes-shimada-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 86 , name: '江越大河(mng)' , - email: 'nutfes-egoshi-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 87 , name: '小幡龍平(usr)' , - email: 'nutfes-obata-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 88 , name: '木波誠也(dev)' , - email: 'nutfes-kinami-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 89 , name: '遠藤成(mng)' , - email: 'nutfes-endou-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 90 , name: '荒木祐也(usr)' , - email: 'nutfes-araki-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 91 , name: '糸原ケント(dev)' , - email: 'nutfes-itohara-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 92 , name: '北条正也(mng)' , - email: 'nutfes-hojo-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 93 , name: '山本大輝(usr)' , - email: 'nutfes-yamamoto-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 94 , name: '大山雄介(dev)' , - email: 'nutfes-oyama-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 95 , name: '高寺持夢(mng)' , - email: 'nutfes-takatera-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 96 , name: '佐藤連(usr)' , - email: 'nutfes-satou-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 97 , name: '仁保旭(dev)' , - email: 'nutfes-niho-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 98 , name: '谷川正木(mng)' , - email: 'nutfes-tanikawa-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 99 , name: '浜治雅人(usr)' , - email: 'nutfes-hamazi-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 100 , name: '及川正樹(dev)' , - email: 'nutfes-oyokawa-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 101 , name: '尾中有機(mng)' , - email: 'nutfes-onaka-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 102 , name: '村上後期(usr)' , - email: 'nutfes-murakami-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 103 , name: '守屋高貴(dev)' , - email: 'nutfes-moriya-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 104 , name: '秋山巧(mng)' , - email: 'nutfes-akiyama-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 105 , name: '川原隆(usr)' , - email: 'nutfes-kawahara-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 106 , name: '斎藤幸也(dev)' , - email: 'nutfes-saitou-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 107 , name: '青柳向陽(mng)' , - email: 'nutfes-aoygi-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 108 , name: '加治屋連(usr)' , - email: 'nutfes-kaziya-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 109 , name: '小林雄介(dev)' , - email: 'nutfes-kobayashi-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 110 , name: '望月篤史(mng)' , - email: 'nutfes-mochiduki-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 111 , name: '桑原健太郎(usr)' , - email: 'nutfes-kuwahara-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 112 , name: '湯浅篤紀(dev)' , - email: 'nutfes-yuasa-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 113 , name: '小川一平(mng)' , - email: 'nutfes-ogawa-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 114 , name: '石井台地(usr)' , - email: 'nutfes-ishi-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 115 , name: '伊藤一樹(dev)' , - email: 'nutfes-itou-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 116 , name: '梅野竜太郎(mng)' , - email: 'nutfes-umeno-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 117 , name: '坂本征四郎(usr)' , - email: 'nutfes-sakamoto-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 - }, - { id: 118 , name: '長坂健也(dev)' , - email: 'nutfes-nagasaka-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 119 , name: '藤田建都(mng)' , - email: 'nutfes-fujita-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 2 - }, - { id: 120 , name: '原口史人(usr)' , - email: 'nutfes-haraguchi-h@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 3 -}, -) \ No newline at end of file +User.seed(:id, + { id: 1, name: '技大太朗(dev)', + email: 'nutfes-taro@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 2, name: '技大次郎(mng)', + email: 'nutfes-jiro@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 3, name: '技大三郎(usr)', + email: 'nutfes-saburo@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 4, name: '平内隆太(dev)', + email: 'nutfes-heinai-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 5, name: 'デラロサ(mng)', + email: 'nutfes-derarosa-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 6, name: 'サンチェス(usr)', + email: 'nutfes-sachece-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 7, name: '大竹寛(dev)', + email: 'nutfes-otake-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 8, name: '菅野智之(mng)', + email: 'nutfes-sugano-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 9, name: '山崎伊織(usr)', + email: 'nutfes-yamasaki-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 10, name: '戸郷翔征(dev)', + email: 'nutfes-togou-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 11, name: '伊納正一(mng)', + email: 'nutfes-inou-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 12, name: '野上亮磨(usr)', + email: 'nutfes-nogami-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 13, name: '今村信貴(dev)', + email: 'nutfes-imamura-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 14, name: '鍵谷陽平(mng)', + email: 'nutfes-kagiya-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 15, name: '太田龍(usr)', + email: 'nutfes-oota-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 16, name: '桜井俊貴(dev)', + email: 'nutfes-sakurai-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 17, name: '中川浩太(mng)', + email: 'nutfes-nakagawa-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 18, name: 'メルセデス(usr)', + email: 'nutfes-mercededes-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 19, name: '畠世周(dev)', + email: 'nutfes-hatake-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 20, name: '桑原拓也(mng)', + email: 'nutfes-kuwahara-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 21, name: '高橋優貴(usr)', + email: 'nutfes-takahashi-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 22, name: 'ビエイラ(dev)', + email: 'nutfes-vieira-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 23, name: '利根千秋(mng)', + email: 'nutfes-tone-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 24, name: '高梨雄平(usr)', + email: 'nutfes-takanashi-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 25, name: '直江大輔(dev)', + email: 'nutfes-naoe-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 26, name: '伊藤雄輔(mng)', + email: 'nutfes-itoh-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 27, name: '高木涼介(usr)', + email: 'nutfes-takagi-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 28, name: '山本一樹(dev)', + email: 'nutfes-yamamoto-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 29, name: '田中智樹(mng)', + email: 'nutfes-tanaka-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 30, name: '横川鋼(usr)', + email: 'nutfes-yokokawa-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 31, name: '古川有利(dev)', + email: 'nutfes-furukawa-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 32, name: '大江竜聖(mng)', + email: 'nutfes-ooe-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 33, name: '戸田夏樹(usr)', + email: 'nutfes-toda-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 34, name: '井上雄大(dev)', + email: 'nutfes-inoue-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 35, name: '沼田正平(mng)', + email: 'nutfes-numata-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 36, name: '堀岡隼人(usr)', + email: 'nutfes-horioka-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 37, name: '山口俊(dev)', + email: 'nutfes-yamaguchi-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 38, name: '小林誠司(mng)', + email: 'nutfes-kobayashi-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 39, name: '大城卓三(usr)', + email: 'nutfes-oshiro-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 40, name: '炭谷銀次郎(dev)', + email: 'nutfes-sumitani-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 41, name: '岸田之則(mng)', + email: 'nutfes-kishida-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 42, name: '山瀬慎之介(usr)', + email: 'nutfes-yamase-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 43, name: '荻原哲(dev)', + email: 'nutfes-ogiwara-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 44, name: '喜多涼介(mng)', + email: 'nutfes-kita-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 45, name: '湯浅大(usr)', + email: 'nutfes-yuasa-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 46, name: '増田大樹(dev)', + email: 'nutfes-masuda-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 47, name: '中島博之(mng)', + email: 'nutfes-nakashima-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 48, name: '坂本勇人(usr)', + email: 'nutfes-sakamoto-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 49, name: '中田翔(dev)', + email: 'nutfes-nakata-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 50, name: 'スモーク(mng)', + email: 'nutfes-sumoku-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 51, name: '岡本和馬(usr)', + email: 'nutfes-okamoto-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 52, name: '吉川尚樹(dev)', + email: 'nutfes-yodhikawa-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 53, name: '廣川大志(mng)', + email: 'nutfes-hiroka-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 54, name: '若林晃弘(usr)', + email: 'nutfes-wakabayashi-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 55, name: '中山礼都(dev)', + email: 'nutfes-nakayama-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 56, name: 'ウィーラー(mng)', + email: 'nutfes-weeler-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 57, name: '北村拓海(usr)', + email: 'nutfes-kitamura-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 58, name: '山下耕太(dev)', + email: 'nutfes-yamashita-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 59, name: '菊田博和(mng)', + email: 'nutfes-kikuta-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 60, name: '増田隆(usr)', + email: 'nutfes-masuda2-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 61, name: '松井義光(dev)', + email: 'nutfes-matsui-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 62, name: '香月一也(mng)', + email: 'nutfes-katsuki-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 63, name: '秋広優斗(usr)', + email: 'nutfes-akihiro-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 64, name: '平間隼人(dev)', + email: 'nutfes-hirama-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 65, name: '煬帝寛(mng)', + email: 'nutfes-yoh-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 66, name: '丸佳浩(usr)', + email: 'nutfes-maru-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 67, name: '亀井義行(dev)', + email: 'nutfes-kamei-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 68, name: '梶谷孝之(mng)', + email: 'nutfes-kaziya-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 69, name: '松原誠也(usr)', + email: 'nutfes-matsubara-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 70, name: '石川慎吾(dev)', + email: 'nutfes-ishikawa-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 71, name: '立川総一郎(mng)', + email: 'nutfes-tachikawa-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 72, name: '重信慎之介(usr)', + email: 'nutfes-shigenobu-g@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 73, name: '岩崎優(dev)', + email: 'nutfes-iwasaki-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 74, name: '西純也(mng)', + email: 'nutfes-nishi1-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 75, name: '西勇気(usr)', + email: 'nutfes-nishi2-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 76, name: '岩貞雄太(dev)', + email: 'nutfes-iwasada-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 77, name: '馬場康介(mng)', + email: 'nutfes-baba-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 78, name: '藤波慎太郎(usr)', + email: 'nutfes-fujinami-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 79, name: '中田健一(dev)', + email: 'nutfes-nakata-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 80, name: '岩田実(mng)', + email: 'nutfes-iwata-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 81, name: '伊藤将司(usr)', + email: 'nutfes-itoh-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 82, name: '小野大紀(dev)', + email: 'nutfes-ono-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 83, name: '高橋はると(mng)', + email: 'nutfes-takahashi-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 84, name: '片山裕也(usr)', + email: 'nutfes-katayama-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 85, name: '島田海里(dev)', + email: 'nutfes-shimada-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 86, name: '江越大河(mng)', + email: 'nutfes-egoshi-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 87, name: '小幡龍平(usr)', + email: 'nutfes-obata-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 88, name: '木波誠也(dev)', + email: 'nutfes-kinami-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 89, name: '遠藤成(mng)', + email: 'nutfes-endou-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 90, name: '荒木祐也(usr)', + email: 'nutfes-araki-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 91, name: '糸原ケント(dev)', + email: 'nutfes-itohara-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 92, name: '北条正也(mng)', + email: 'nutfes-hojo-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 93, name: '山本大輝(usr)', + email: 'nutfes-yamamoto-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 94, name: '大山雄介(dev)', + email: 'nutfes-oyama-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 95, name: '高寺持夢(mng)', + email: 'nutfes-takatera-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 96, name: '佐藤連(usr)', + email: 'nutfes-satou-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 97, name: '仁保旭(dev)', + email: 'nutfes-niho-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 98, name: '谷川正木(mng)', + email: 'nutfes-tanikawa-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 99, name: '浜治雅人(usr)', + email: 'nutfes-hamazi-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 100, name: '及川正樹(dev)', + email: 'nutfes-oyokawa-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 101, name: '尾中有機(mng)', + email: 'nutfes-onaka-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 102, name: '村上後期(usr)', + email: 'nutfes-murakami-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 103, name: '守屋高貴(dev)', + email: 'nutfes-moriya-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 104, name: '秋山巧(mng)', + email: 'nutfes-akiyama-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 105, name: '川原隆(usr)', + email: 'nutfes-kawahara-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 106, name: '斎藤幸也(dev)', + email: 'nutfes-saitou-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 107, name: '青柳向陽(mng)', + email: 'nutfes-aoygi-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 108, name: '加治屋連(usr)', + email: 'nutfes-kaziya-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 109, name: '小林雄介(dev)', + email: 'nutfes-kobayashi-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 110, name: '望月篤史(mng)', + email: 'nutfes-mochiduki-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 111, name: '桑原健太郎(usr)', + email: 'nutfes-kuwahara-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 112, name: '湯浅篤紀(dev)', + email: 'nutfes-yuasa-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 113, name: '小川一平(mng)', + email: 'nutfes-ogawa-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 114, name: '石井台地(usr)', + email: 'nutfes-ishi-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 115, name: '伊藤一樹(dev)', + email: 'nutfes-itou-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 116, name: '梅野竜太郎(mng)', + email: 'nutfes-umeno-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 117, name: '坂本征四郎(usr)', + email: 'nutfes-sakamoto-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }, + { id: 118, name: '長坂健也(dev)', + email: 'nutfes-nagasaka-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 119, name: '藤田建都(mng)', + email: 'nutfes-fujita-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 2 }, + { id: 120, name: '原口史人(usr)', + email: 'nutfes-haraguchi-h@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 3 }) diff --git a/api/db/fixtures/develop/user_detail.rb b/api/db/fixtures/develop/user_detail.rb index 6b7357f34..cc1368a0a 100644 --- a/api/db/fixtures/develop/user_detail.rb +++ b/api/db/fixtures/develop/user_detail.rb @@ -1,386 +1,321 @@ -UserDetail.seed( :id, - { id: 1 , tel: '11111111111' , - grade_id: 1 , - department_id: 1 , - user_id: 1 , - student_id: 11111111 - }, - { id: 2 , tel: '22222222222' , - grade_id: 2 , - department_id: 2 , - user_id: 2 , - student_id: 22222222 - }, - { id: 3 , tel: '33333333333' , - grade_id: 3 , - department_id: 3 , - user_id: 3 , - student_id: 33333333 - }, - { id: 4 , tel: '44444444444' , - grade_id: 1 , - department_id: 1 , - user_id: 4 , - student_id: 44444444 - }, - { id: 5 , tel: '55555555555' , - grade_id: 2 , - department_id: 2 , - user_id: 5 , - student_id: 55555555 - }, - { id: 6 , tel: '66666666666' , - grade_id: 3 , - department_id: 3 , - user_id: 6 , - student_id: 66666666 - }, - { id: 7 , tel: '77777777777' , - grade_id: 2 , - department_id: 2 , - user_id: 7 , - student_id: 77777777 - }, - { id: 8 , tel: '88888888888' , - grade_id: 3 , - department_id: 3 , - user_id: 8 , - student_id: 88888888 - }, - { id: 9 , tel: '99999999999' , - grade_id: 1 , - department_id: 1 , - user_id: 9 , - student_id: 99999999 - }, - { id: 10 , tel: '00000000000' , - grade_id: 2 , - department_id: 2 , - user_id: 10 , - student_id: 00000000 - }, - { id: 11 , tel: '10101010101' , - grade_id: 3 , - department_id: 3 , - user_id: 11 , - student_id: 10110111 - }, - { id: 12 , tel: '20202020202' , - grade_id: 2 , - department_id: 1 , - user_id: 12 , - student_id: 20220222 - }, - { id: 13 , tel: '30303030303' , - grade_id: 2 , - department_id: 2 , - user_id: 13 , - student_id: 30303333 - }, - { id: 14 , tel: '40404040404' , - grade_id: 4 , - department_id: 3 , - user_id: 14 , - student_id: 30343433 - }, - { id: 15 , tel: '50505050505' , - grade_id: 2 , - department_id: 2 , - user_id: 15 , - student_id: 50345453 - }, - { id: 16 , tel: '60606060606' , - grade_id: 3 , - department_id: 3 , - user_id: 16 , - student_id: 00365453 - }, - { id: 17 , tel: '70707070707' , - grade_id: 1 , - department_id: 1 , - user_id: 17 , - student_id: 00775453 - }, - { id: 18 , tel: '80808080808' , - grade_id: 2 , - department_id: 2 , - user_id: 18 , - student_id: 88775453 - }, - { id: 19 , tel: '90909090909' , - grade_id: 3 , - department_id: 3 , - user_id: 19 , - student_id: 987759453 - }, - { id: 20 , tel: '12345678900' , - grade_id: 1 , - department_id: 1 , - user_id: 20 , - student_id: 18107080 - }, - { id: 21 , tel: '12345678911' , - grade_id: 2 , - department_id: 2 , - user_id: 21 , - student_id: 18107081 - }, - { id: 22 , tel: '12345678922' , - grade_id: 3 , - department_id: 3 , - user_id: 22 , - student_id: 18107082 - }, - { id: 23 , tel: '12345678933' , - grade_id: 2 , - department_id: 2 , - user_id: 23 , - student_id: 18107083 - }, - { id: 24 , tel: '12345678944' , - grade_id: 3 , - department_id: 3 , - user_id: 24 , - student_id: 18107084 - }, - { id: 25 , tel: '12345678955' , - grade_id: 1 , - department_id: 1 , - user_id: 25 , - student_id: 18107085 - }, - { id: 26 , tel: '12345678966' , - grade_id: 2 , - department_id: 2 , - user_id: 26 , - student_id: 18107086 - }, - { id: 27 , tel: '12345678977' , - grade_id: 3 , - department_id: 3 , - user_id: 27 , - student_id: 18107087 - }, - { id: 28 , tel: '12345678988' , - grade_id: 2 , - department_id: 1 , - user_id: 28 , - student_id: 18107088 - }, - { id: 29 , tel: '12345678999' , - grade_id: 2 , - department_id: 2 , - user_id: 29 , - student_id: 18107089 - }, - { id: 30 , tel: '22345678999' , - grade_id: 4 , - department_id: 3 , - user_id: 30 , - student_id: 28107089 - }, - { id: 31 , tel: '32345678999' , - grade_id: 2 , - department_id: 2 , - user_id: 31 , - student_id: 38107089 - }, - { id: 32 , tel: '42345678999' , - grade_id: 3 , - department_id: 3 , - user_id: 32 , - student_id: 48107089 - }, - { id: 33 , tel: '52345678999' , - grade_id: 1 , - department_id: 1 , - user_id: 33 , - student_id: 58107089 - }, - { id: 34 , tel: '62345678999' , - grade_id: 2 , - department_id: 2 , - user_id: 34 , - student_id: 68107089 - }, - { id: 35 , tel: '72345678999' , - grade_id: 3 , - department_id: 3 , - user_id: 35 , - student_id: 78107089 - }, - { id: 36 , tel: '82345678999' , - grade_id: 1 , - department_id: 1 , - user_id: 36 , - student_id: 88107089 - }, - { id: 37 , tel: '92345678999' , - grade_id: 2 , - department_id: 2 , - user_id: 37 , - student_id: 89107089 - }, - { id: 38 , tel: '11122233344' , - grade_id: 3 , - department_id: 3 , - user_id: 38 , - student_id: 16666666 - }, - { id: 39 , tel: '21122233344' , - grade_id: 2 , - department_id: 2 , - user_id: 39 , - student_id: 26666666 - }, - { id: 40 , tel: '31122233344' , - grade_id: 3 , - department_id: 3 , - user_id: 40 , - student_id: 36666666 - }, - { id: 41 , tel: '41122233344' , - grade_id: 1 , - department_id: 1 , - user_id: 41 , - student_id: 46666666 - }, - { id: 42 , tel: '51122233344' , - grade_id: 2 , - department_id: 2 , - user_id: 42 , - student_id: 56666666 - }, - { id: 43 , tel: '61122233344' , - grade_id: 3 , - department_id: 3 , - user_id: 43 , - student_id: 76666666 - }, - { id: 44 , tel: '71022333447' , - grade_id: 2 , - department_id: 1 , - user_id: 44 , - student_id: 86666666 - }, - { id: 45 , tel: '83922233344' , - grade_id: 2 , - department_id: 2 , - user_id: 45 , - student_id: 96666666 - }, - { id: 46 , tel: '00122233344' , - grade_id: 4 , - department_id: 3 , - user_id: 46 , - student_id: 91666666 - }, - { id: 47 , tel: '21122230044' , - grade_id: 2 , - department_id: 2 , - user_id: 47 , - student_id: 91166666 - }, - { id: 48 , tel: '31120033344' , - grade_id: 3 , - department_id: 3 , - user_id: 48 , - student_id: 91116666 - }, - { id: 49 , tel: '41190233344' , - grade_id: 1 , - department_id: 1 , - user_id: 49 , - student_id: 91111666 - }, - { id: 50 , tel: '51542233344' , - grade_id: 2 , - department_id: 2 , - user_id: 50 , - student_id: 91111166 - }, - { id: 51 , tel: '61188233344' , - grade_id: 3 , - department_id: 3 , - user_id: 51 , - student_id: 91111116 - }, - { id: 52 , tel: '71145233344' , - grade_id: 1 , - department_id: 1 , - user_id: 52 , - student_id: 91111111 - }, - { id: 53 , tel: '81182233344' , - grade_id: 2 , - department_id: 2 , - user_id: 53 , - student_id: 92111111 - }, - { id: 54 , tel: '81182233344' , - grade_id: 3 , - department_id: 3 , - user_id: 54 , - student_id: 17107082 - }, - { id: 55 , tel: '12343578933' , - grade_id: 2 , - department_id: 2 , - user_id: 55 , - student_id: 17107083 - }, - { id: 56 , tel: '88943578933' , - grade_id: 3 , - department_id: 3 , - user_id: 56 , - student_id: 17107084 - }, - { id: 57 , tel: '28943578904' , - grade_id: 1 , - department_id: 1 , - user_id: 57 , - student_id: 17107085 - }, - { id: 58 , tel: '38943578904' , - grade_id: 2 , - department_id: 2 , - user_id: 58 , - student_id: 17107086 - }, - { id: 59 , tel: '48943578904' , - grade_id: 3 , - department_id: 3 , - user_id: 59 , - student_id: 14107086 - }, - { id: 60 , tel: '58943578904' , - grade_id: 2 , - department_id: 1 , - user_id: 60 , - student_id: 14207086 - }, - { id: 61 , tel: '68943578904' , - grade_id: 2 , - department_id: 2 , - user_id: 61 , - student_id: 14307089 - }, - { id: 62 , tel: '22345678999' , - grade_id: 4 , - department_id: 3 , - user_id: 62 , - student_id: 14305489 - }, - { id: 63 , tel: '32345670599' , - grade_id: 2 , - department_id: 2 , - user_id: 63 , - student_id: 14805489 - }, - { id: 64 , tel: '32845670599' , - grade_id: 3 , - department_id: 3 , - user_id: 64 , - student_id: 14866489 - }, -) +UserDetail.seed(:id, + { id: 1, tel: '11111111111', + grade_id: 1, + department_id: 1, + user_id: 1, + student_id: 11_111_111 }, + { id: 2, tel: '22222222222', + grade_id: 2, + department_id: 2, + user_id: 2, + student_id: 22_222_222 }, + { id: 3, tel: '33333333333', + grade_id: 3, + department_id: 3, + user_id: 3, + student_id: 33_333_333 }, + { id: 4, tel: '44444444444', + grade_id: 1, + department_id: 1, + user_id: 4, + student_id: 44_444_444 }, + { id: 5, tel: '55555555555', + grade_id: 2, + department_id: 2, + user_id: 5, + student_id: 55_555_555 }, + { id: 6, tel: '66666666666', + grade_id: 3, + department_id: 3, + user_id: 6, + student_id: 66_666_666 }, + { id: 7, tel: '77777777777', + grade_id: 2, + department_id: 2, + user_id: 7, + student_id: 77_777_777 }, + { id: 8, tel: '88888888888', + grade_id: 3, + department_id: 3, + user_id: 8, + student_id: 88_888_888 }, + { id: 9, tel: '99999999999', + grade_id: 1, + department_id: 1, + user_id: 9, + student_id: 99_999_999 }, + { id: 10, tel: '00000000000', + grade_id: 2, + department_id: 2, + user_id: 10, + student_id: 0o0000000 }, + { id: 11, tel: '10101010101', + grade_id: 3, + department_id: 3, + user_id: 11, + student_id: 10_110_111 }, + { id: 12, tel: '20202020202', + grade_id: 2, + department_id: 1, + user_id: 12, + student_id: 20_220_222 }, + { id: 13, tel: '30303030303', + grade_id: 2, + department_id: 2, + user_id: 13, + student_id: 30_303_333 }, + { id: 14, tel: '40404040404', + grade_id: 4, + department_id: 3, + user_id: 14, + student_id: 30_343_433 }, + { id: 15, tel: '50505050505', + grade_id: 2, + department_id: 2, + user_id: 15, + student_id: 50_345_453 }, + { id: 16, tel: '60606060606', + grade_id: 3, + department_id: 3, + user_id: 16, + student_id: 0o0365453 }, + { id: 17, tel: '70707070707', + grade_id: 1, + department_id: 1, + user_id: 17, + student_id: 0o0775453 }, + { id: 18, tel: '80808080808', + grade_id: 2, + department_id: 2, + user_id: 18, + student_id: 88_775_453 }, + { id: 19, tel: '90909090909', + grade_id: 3, + department_id: 3, + user_id: 19, + student_id: 987_759_453 }, + { id: 20, tel: '12345678900', + grade_id: 1, + department_id: 1, + user_id: 20, + student_id: 18_107_080 }, + { id: 21, tel: '12345678911', + grade_id: 2, + department_id: 2, + user_id: 21, + student_id: 18_107_081 }, + { id: 22, tel: '12345678922', + grade_id: 3, + department_id: 3, + user_id: 22, + student_id: 18_107_082 }, + { id: 23, tel: '12345678933', + grade_id: 2, + department_id: 2, + user_id: 23, + student_id: 18_107_083 }, + { id: 24, tel: '12345678944', + grade_id: 3, + department_id: 3, + user_id: 24, + student_id: 18_107_084 }, + { id: 25, tel: '12345678955', + grade_id: 1, + department_id: 1, + user_id: 25, + student_id: 18_107_085 }, + { id: 26, tel: '12345678966', + grade_id: 2, + department_id: 2, + user_id: 26, + student_id: 18_107_086 }, + { id: 27, tel: '12345678977', + grade_id: 3, + department_id: 3, + user_id: 27, + student_id: 18_107_087 }, + { id: 28, tel: '12345678988', + grade_id: 2, + department_id: 1, + user_id: 28, + student_id: 18_107_088 }, + { id: 29, tel: '12345678999', + grade_id: 2, + department_id: 2, + user_id: 29, + student_id: 18_107_089 }, + { id: 30, tel: '22345678999', + grade_id: 4, + department_id: 3, + user_id: 30, + student_id: 28_107_089 }, + { id: 31, tel: '32345678999', + grade_id: 2, + department_id: 2, + user_id: 31, + student_id: 38_107_089 }, + { id: 32, tel: '42345678999', + grade_id: 3, + department_id: 3, + user_id: 32, + student_id: 48_107_089 }, + { id: 33, tel: '52345678999', + grade_id: 1, + department_id: 1, + user_id: 33, + student_id: 58_107_089 }, + { id: 34, tel: '62345678999', + grade_id: 2, + department_id: 2, + user_id: 34, + student_id: 68_107_089 }, + { id: 35, tel: '72345678999', + grade_id: 3, + department_id: 3, + user_id: 35, + student_id: 78_107_089 }, + { id: 36, tel: '82345678999', + grade_id: 1, + department_id: 1, + user_id: 36, + student_id: 88_107_089 }, + { id: 37, tel: '92345678999', + grade_id: 2, + department_id: 2, + user_id: 37, + student_id: 89_107_089 }, + { id: 38, tel: '11122233344', + grade_id: 3, + department_id: 3, + user_id: 38, + student_id: 16_666_666 }, + { id: 39, tel: '21122233344', + grade_id: 2, + department_id: 2, + user_id: 39, + student_id: 26_666_666 }, + { id: 40, tel: '31122233344', + grade_id: 3, + department_id: 3, + user_id: 40, + student_id: 36_666_666 }, + { id: 41, tel: '41122233344', + grade_id: 1, + department_id: 1, + user_id: 41, + student_id: 46_666_666 }, + { id: 42, tel: '51122233344', + grade_id: 2, + department_id: 2, + user_id: 42, + student_id: 56_666_666 }, + { id: 43, tel: '61122233344', + grade_id: 3, + department_id: 3, + user_id: 43, + student_id: 76_666_666 }, + { id: 44, tel: '71022333447', + grade_id: 2, + department_id: 1, + user_id: 44, + student_id: 86_666_666 }, + { id: 45, tel: '83922233344', + grade_id: 2, + department_id: 2, + user_id: 45, + student_id: 96_666_666 }, + { id: 46, tel: '00122233344', + grade_id: 4, + department_id: 3, + user_id: 46, + student_id: 91_666_666 }, + { id: 47, tel: '21122230044', + grade_id: 2, + department_id: 2, + user_id: 47, + student_id: 91_166_666 }, + { id: 48, tel: '31120033344', + grade_id: 3, + department_id: 3, + user_id: 48, + student_id: 91_116_666 }, + { id: 49, tel: '41190233344', + grade_id: 1, + department_id: 1, + user_id: 49, + student_id: 91_111_666 }, + { id: 50, tel: '51542233344', + grade_id: 2, + department_id: 2, + user_id: 50, + student_id: 91_111_166 }, + { id: 51, tel: '61188233344', + grade_id: 3, + department_id: 3, + user_id: 51, + student_id: 91_111_116 }, + { id: 52, tel: '71145233344', + grade_id: 1, + department_id: 1, + user_id: 52, + student_id: 91_111_111 }, + { id: 53, tel: '81182233344', + grade_id: 2, + department_id: 2, + user_id: 53, + student_id: 92_111_111 }, + { id: 54, tel: '81182233344', + grade_id: 3, + department_id: 3, + user_id: 54, + student_id: 17_107_082 }, + { id: 55, tel: '12343578933', + grade_id: 2, + department_id: 2, + user_id: 55, + student_id: 17_107_083 }, + { id: 56, tel: '88943578933', + grade_id: 3, + department_id: 3, + user_id: 56, + student_id: 17_107_084 }, + { id: 57, tel: '28943578904', + grade_id: 1, + department_id: 1, + user_id: 57, + student_id: 17_107_085 }, + { id: 58, tel: '38943578904', + grade_id: 2, + department_id: 2, + user_id: 58, + student_id: 17_107_086 }, + { id: 59, tel: '48943578904', + grade_id: 3, + department_id: 3, + user_id: 59, + student_id: 14_107_086 }, + { id: 60, tel: '58943578904', + grade_id: 2, + department_id: 1, + user_id: 60, + student_id: 14_207_086 }, + { id: 61, tel: '68943578904', + grade_id: 2, + department_id: 2, + user_id: 61, + student_id: 14_307_089 }, + { id: 62, tel: '22345678999', + grade_id: 4, + department_id: 3, + user_id: 62, + student_id: 14_305_489 }, + { id: 63, tel: '32345670599', + grade_id: 2, + department_id: 2, + user_id: 63, + student_id: 14_805_489 }, + { id: 64, tel: '32845670599', + grade_id: 3, + department_id: 3, + user_id: 64, + student_id: 14_866_489 }) diff --git a/api/db/fixtures/develop/user_page_setting.rb b/api/db/fixtures/develop/user_page_setting.rb index ad414c940..473934f23 100644 --- a/api/db/fixtures/develop/user_page_setting.rb +++ b/api/db/fixtures/develop/user_page_setting.rb @@ -1,28 +1,26 @@ -UserPageSetting.seed( :id, - { id: 1 , is_regist_group: true, - is_regist_food_product: true, - is_edit_group: true, - is_edit_sub_rep: true, - is_edit_place: true, - is_edit_power_order: true, - is_edit_rental_order: true, - is_edit_stage_order: true, - is_edit_employee: true, - is_edit_food_product: true, - is_edit_purchase_list: true, - is_edit_announcement: true, - add_power_order: true, - add_rental_order: true, - add_employee: true, - add_food_product: true, - add_purchase_list: true, - add_announcement: true, - fes_year_id: 2, - is_edit_user: true, - is_edit_stage_common_option: true, - is_edit_public_relation: true, - is_edit_venue_map: true, - is_edit_cooking_process: true, - add_stage_order: true - } -) +UserPageSetting.seed(:id, + { id: 1, is_regist_group: true, + is_regist_food_product: true, + is_edit_group: true, + is_edit_sub_rep: true, + is_edit_place: true, + is_edit_power_order: true, + is_edit_rental_order: true, + is_edit_stage_order: true, + is_edit_employee: true, + is_edit_food_product: true, + is_edit_purchase_list: true, + is_edit_announcement: true, + add_power_order: true, + add_rental_order: true, + add_employee: true, + add_food_product: true, + add_purchase_list: true, + add_announcement: true, + fes_year_id: 2, + is_edit_user: true, + is_edit_stage_common_option: true, + is_edit_public_relation: true, + is_edit_venue_map: true, + is_edit_cooking_process: true, + add_stage_order: true }) diff --git a/api/db/fixtures/production/department.rb b/api/db/fixtures/production/department.rb index 2bd206ff4..d0be8f0c2 100644 --- a/api/db/fixtures/production/department.rb +++ b/api/db/fixtures/production/department.rb @@ -1,20 +1,19 @@ -Department.seed( :id, - { id: 1, name: "機械工学分野/機械創造工学課程" }, - { id: 2, name: "電気電子情報工学分野/電気電子情報工学過程" }, - { id: 3, name: "物質生物工学分野/物質材料工学過程/生物機能工学過程" }, - { id: 4, name: "環境社会基盤工学分野/環境社会基盤工学過程" }, - { id: 5, name: "情報・経営システム工学分野/情報・経営システム工学過程" }, - { id: 6, name: "機械工学分野/機械創造工学専攻" }, - { id: 7, name: "電気電子情報工学分野/電気電子情報工学専攻" }, - { id: 8, name: "物質生物工学分野/物質材料工学専攻/生物機能工学専攻" }, - { id: 9, name: "環境社会基盤工学分野/環境社会基盤工学専攻" }, - { id: 10, name: "情報・経営システム工学分野/情報・経営システム工学専攻" }, - { id: 11, name: "量子・原子力統合工学分野/原子力システム安全工学専攻" }, - { id: 12, name: "システム安全工学専攻" }, - { id: 13, name: "技術科学イノベーション専攻" }, - { id: 14, name: "情報・制御工学分野/情報・制御工学専攻" }, - { id: 15, name: "材料工学分野/材料工学専攻" }, - { id: 16, name: "エネルギー工学分野/エネルギー・環境工学専攻" }, - { id: 17, name: "社会環境・生物機能工学分野/生物統合工学専攻" }, - { id: 18, name: "その他" }, -) +Department.seed(:id, + { id: 1, name: '機械工学分野/機械創造工学課程' }, + { id: 2, name: '電気電子情報工学分野/電気電子情報工学過程' }, + { id: 3, name: '物質生物工学分野/物質材料工学過程/生物機能工学過程' }, + { id: 4, name: '環境社会基盤工学分野/環境社会基盤工学過程' }, + { id: 5, name: '情報・経営システム工学分野/情報・経営システム工学過程' }, + { id: 6, name: '機械工学分野/機械創造工学専攻' }, + { id: 7, name: '電気電子情報工学分野/電気電子情報工学専攻' }, + { id: 8, name: '物質生物工学分野/物質材料工学専攻/生物機能工学専攻' }, + { id: 9, name: '環境社会基盤工学分野/環境社会基盤工学専攻' }, + { id: 10, name: '情報・経営システム工学分野/情報・経営システム工学専攻' }, + { id: 11, name: '量子・原子力統合工学分野/原子力システム安全工学専攻' }, + { id: 12, name: 'システム安全工学専攻' }, + { id: 13, name: '技術科学イノベーション専攻' }, + { id: 14, name: '情報・制御工学分野/情報・制御工学専攻' }, + { id: 15, name: '材料工学分野/材料工学専攻' }, + { id: 16, name: 'エネルギー工学分野/エネルギー・環境工学専攻' }, + { id: 17, name: '社会環境・生物機能工学分野/生物統合工学専攻' }, + { id: 18, name: 'その他' }) diff --git a/api/db/fixtures/production/fes_year_date.rb b/api/db/fixtures/production/fes_year_date.rb index 03c576767..0c9b28786 100644 --- a/api/db/fixtures/production/fes_year_date.rb +++ b/api/db/fixtures/production/fes_year_date.rb @@ -1,9 +1,6 @@ -FesYear.seed( :id, - { id: 1, year_num: 2024 }, -) - -FesDate.seed( :id, - { id: 1, days_num: 1, date: '9月14日', day: '土曜日', fes_year_id: 1 }, - { id: 2, days_num: 2, date: '9月15日', day: '日曜日', fes_year_id: 1 }, -) +FesYear.seed(:id, + { id: 1, year_num: 2024 }) +FesDate.seed(:id, + { id: 1, days_num: 1, date: '9月14日', day: '土曜日', fes_year_id: 1 }, + { id: 2, days_num: 2, date: '9月15日', day: '日曜日', fes_year_id: 1 }) diff --git a/api/db/fixtures/production/grade.rb b/api/db/fixtures/production/grade.rb index 220cb7d58..ed0c11a61 100644 --- a/api/db/fixtures/production/grade.rb +++ b/api/db/fixtures/production/grade.rb @@ -1,19 +1,17 @@ -Grade.seed( :id, - { id: 1, name: 'B1[学部1年]' }, - { id: 2, name: 'B2[学部2年]' }, - { id: 3, name: 'B3[学部3年]' }, - { id: 4, name: 'B4[学部4年]' }, - { id: 5, name: 'M1[修士1年]' }, - { id: 6, name: 'M2[修士2年]' }, - { id: 7, name: 'D1[博士1年]' }, - { id: 8, name: 'D2[博士2年]' }, - { id: 9, name: 'D3[博士3年]' }, - { id: 10, name: 'GD1[イノベ1年]' }, - { id: 11, name: 'GD2[イノベ2年]' }, - { id: 12, name: 'GD3[イノベ3年]' }, - { id: 13, name: 'GD4[イノベ4年]' }, - { id: 14, name: 'GD5[イノベ5年]' }, - { id: 15, name: '教員' }, - { id: 16, name: 'その他' }, -) - +Grade.seed(:id, + { id: 1, name: 'B1[学部1年]' }, + { id: 2, name: 'B2[学部2年]' }, + { id: 3, name: 'B3[学部3年]' }, + { id: 4, name: 'B4[学部4年]' }, + { id: 5, name: 'M1[修士1年]' }, + { id: 6, name: 'M2[修士2年]' }, + { id: 7, name: 'D1[博士1年]' }, + { id: 8, name: 'D2[博士2年]' }, + { id: 9, name: 'D3[博士3年]' }, + { id: 10, name: 'GD1[イノベ1年]' }, + { id: 11, name: 'GD2[イノベ2年]' }, + { id: 12, name: 'GD3[イノベ3年]' }, + { id: 13, name: 'GD4[イノベ4年]' }, + { id: 14, name: 'GD5[イノベ5年]' }, + { id: 15, name: '教員' }, + { id: 16, name: 'その他' }) diff --git a/api/db/fixtures/production/group_category.rb b/api/db/fixtures/production/group_category.rb index 44c19a298..25eb022c8 100644 --- a/api/db/fixtures/production/group_category.rb +++ b/api/db/fixtures/production/group_category.rb @@ -1,9 +1,8 @@ -GroupCategory.seed( :id, - { id: 1, name: '食品販売' }, - { id: 2, name: '物品販売' }, - { id: 3, name: 'ステージ' }, - { id: 4, name: '展示・体験' }, - { id: 5, name: '研究室' }, - { id: 6, name: '実行委員' }, - { id: 7, name: 'その他' } -) +GroupCategory.seed(:id, + { id: 1, name: '食品販売' }, + { id: 2, name: '物品販売' }, + { id: 3, name: 'ステージ' }, + { id: 4, name: '展示・体験' }, + { id: 5, name: '研究室' }, + { id: 6, name: '実行委員' }, + { id: 7, name: 'その他' }) diff --git a/api/db/fixtures/production/place.rb b/api/db/fixtures/production/place.rb index 2e6b92c49..1874f7fa6 100644 --- a/api/db/fixtures/production/place.rb +++ b/api/db/fixtures/production/place.rb @@ -1,13 +1,12 @@ -Place.seed( :id, - { id: 1 , name: '希望なし' }, - { id: 2 , name: '講義棟部屋A (103講義室などの大きい講義室)' } , - { id: 3 , name: '講義棟部屋B (104講義室などの小さい講義室)' } , - { id: 4 , name: '事務棟エリア(講義室は含まない。)' } , - { id: 5 , name: '図書館エリア' } , - { id: 6 , name: '電気棟エリア' } , - { id: 7 , name: 'メインステージエリア(情報処理センター前)' } , - { id: 8 , name: '機械・建設棟エリア' }, - { id: 9 , name: '生物棟エリア(電力使用不可)' }, - { id: 10 , name: '環境棟エリア' }, - { id: 11 , name: 'その他のエリア' }, -) +Place.seed(:id, + { id: 1, name: '希望なし' }, + { id: 2, name: '講義棟部屋A (103講義室などの大きい講義室)' }, + { id: 3, name: '講義棟部屋B (104講義室などの小さい講義室)' }, + { id: 4, name: '事務棟エリア(講義室は含まない。)' }, + { id: 5, name: '図書館エリア' }, + { id: 6, name: '電気棟エリア' }, + { id: 7, name: 'メインステージエリア(情報処理センター前)' }, + { id: 8, name: '機械・建設棟エリア' }, + { id: 9, name: '生物棟エリア(電力使用不可)' }, + { id: 10, name: '環境棟エリア' }, + { id: 11, name: 'その他のエリア' }) diff --git a/api/db/fixtures/production/place_allow_list.rb b/api/db/fixtures/production/place_allow_list.rb index 11577375c..d2ceff780 100644 --- a/api/db/fixtures/production/place_allow_list.rb +++ b/api/db/fixtures/production/place_allow_list.rb @@ -1,79 +1,78 @@ PlaceAllowList.seed(:id, - { id: 1, place_id: 1, group_category_id: 1, enable: true }, - { id: 2, place_id: 1, group_category_id: 2, enable: true }, - { id: 3, place_id: 1, group_category_id: 3, enable: true }, - { id: 4, place_id: 1, group_category_id: 4, enable: true }, - { id: 5, place_id: 1, group_category_id: 5, enable: true }, - { id: 6, place_id: 1, group_category_id: 6, enable: true }, - { id: 7, place_id: 1, group_category_id: 7, enable: true }, - { id: 8, place_id: 2, group_category_id: 1, enable: true }, - { id: 9, place_id: 2, group_category_id: 2, enable: true }, - { id: 10, place_id: 2, group_category_id: 3, enable: true }, - { id: 11, place_id: 2, group_category_id: 4, enable: true }, - { id: 12, place_id: 2, group_category_id: 5, enable: true }, - { id: 13, place_id: 2, group_category_id: 6, enable: true }, - { id: 14, place_id: 2, group_category_id: 7, enable: true }, - { id: 15, place_id: 3, group_category_id: 1, enable: true }, - { id: 16, place_id: 3, group_category_id: 2, enable: true }, - { id: 17, place_id: 3, group_category_id: 3, enable: true }, - { id: 18, place_id: 3, group_category_id: 4, enable: true }, - { id: 19, place_id: 3, group_category_id: 5, enable: true }, - { id: 20, place_id: 3, group_category_id: 6, enable: true }, - { id: 21, place_id: 3, group_category_id: 7, enable: true }, - { id: 22, place_id: 4, group_category_id: 1, enable: true }, - { id: 23, place_id: 4, group_category_id: 2, enable: true }, - { id: 24, place_id: 4, group_category_id: 3, enable: true }, - { id: 25, place_id: 4, group_category_id: 4, enable: true }, - { id: 26, place_id: 4, group_category_id: 5, enable: true }, - { id: 27, place_id: 4, group_category_id: 6, enable: true }, - { id: 28, place_id: 4, group_category_id: 7, enable: true }, - { id: 29, place_id: 5, group_category_id: 1, enable: true }, - { id: 30, place_id: 5, group_category_id: 2, enable: true }, - { id: 31, place_id: 5, group_category_id: 3, enable: true }, - { id: 32, place_id: 5, group_category_id: 4, enable: true }, - { id: 33, place_id: 5, group_category_id: 5, enable: true }, - { id: 34, place_id: 5, group_category_id: 6, enable: true }, - { id: 35, place_id: 5, group_category_id: 7, enable: true }, - { id: 36, place_id: 6, group_category_id: 1, enable: true }, - { id: 37, place_id: 6, group_category_id: 2, enable: true }, - { id: 38, place_id: 6, group_category_id: 3, enable: true }, - { id: 39, place_id: 6, group_category_id: 4, enable: true }, - { id: 40, place_id: 6, group_category_id: 5, enable: true }, - { id: 41, place_id: 6, group_category_id: 6, enable: true }, - { id: 42, place_id: 6, group_category_id: 7, enable: true }, - { id: 43, place_id: 7, group_category_id: 1, enable: true }, - { id: 44, place_id: 7, group_category_id: 2, enable: true }, - { id: 45, place_id: 7, group_category_id: 3, enable: true }, - { id: 46, place_id: 7, group_category_id: 4, enable: true }, - { id: 47, place_id: 7, group_category_id: 5, enable: true }, - { id: 48, place_id: 7, group_category_id: 6, enable: true }, - { id: 49, place_id: 7, group_category_id: 7, enable: true }, - { id: 50, place_id: 8, group_category_id: 1, enable: true }, - { id: 51, place_id: 8, group_category_id: 2, enable: true }, - { id: 52, place_id: 8, group_category_id: 3, enable: true }, - { id: 53, place_id: 8, group_category_id: 4, enable: true }, - { id: 54, place_id: 8, group_category_id: 5, enable: true }, - { id: 55, place_id: 8, group_category_id: 6, enable: true }, - { id: 56, place_id: 8, group_category_id: 7, enable: true }, - { id: 57, place_id: 9, group_category_id: 1, enable: true }, - { id: 58, place_id: 9, group_category_id: 2, enable: true }, - { id: 59, place_id: 9, group_category_id: 3, enable: true }, - { id: 60, place_id: 9, group_category_id: 4, enable: true }, - { id: 61, place_id: 9, group_category_id: 5, enable: true }, - { id: 62, place_id: 9, group_category_id: 6, enable: true }, - { id: 63, place_id: 9, group_category_id: 7, enable: true }, - { id: 64, place_id: 10, group_category_id: 1, enable: true }, - { id: 65, place_id: 10, group_category_id: 2, enable: true }, - { id: 66, place_id: 10, group_category_id: 3, enable: true }, - { id: 67, place_id: 10, group_category_id: 4, enable: true }, - { id: 68, place_id: 10, group_category_id: 5, enable: true }, - { id: 69, place_id: 10, group_category_id: 6, enable: true }, - { id: 70, place_id: 10, group_category_id: 7, enable: true }, - { id: 71, place_id: 11, group_category_id: 1, enable: true }, - { id: 72, place_id: 11, group_category_id: 2, enable: true }, - { id: 73, place_id: 11, group_category_id: 3, enable: true }, - { id: 74, place_id: 11, group_category_id: 4, enable: true }, - { id: 75, place_id: 11, group_category_id: 5, enable: true }, - { id: 76, place_id: 11, group_category_id: 6, enable: true }, - { id: 77, place_id: 11, group_category_id: 7, enable: true } -) + { id: 1, place_id: 1, group_category_id: 1, enable: true }, + { id: 2, place_id: 1, group_category_id: 2, enable: true }, + { id: 3, place_id: 1, group_category_id: 3, enable: true }, + { id: 4, place_id: 1, group_category_id: 4, enable: true }, + { id: 5, place_id: 1, group_category_id: 5, enable: true }, + { id: 6, place_id: 1, group_category_id: 6, enable: true }, + { id: 7, place_id: 1, group_category_id: 7, enable: true }, + { id: 8, place_id: 2, group_category_id: 1, enable: true }, + { id: 9, place_id: 2, group_category_id: 2, enable: true }, + { id: 10, place_id: 2, group_category_id: 3, enable: true }, + { id: 11, place_id: 2, group_category_id: 4, enable: true }, + { id: 12, place_id: 2, group_category_id: 5, enable: true }, + { id: 13, place_id: 2, group_category_id: 6, enable: true }, + { id: 14, place_id: 2, group_category_id: 7, enable: true }, + { id: 15, place_id: 3, group_category_id: 1, enable: true }, + { id: 16, place_id: 3, group_category_id: 2, enable: true }, + { id: 17, place_id: 3, group_category_id: 3, enable: true }, + { id: 18, place_id: 3, group_category_id: 4, enable: true }, + { id: 19, place_id: 3, group_category_id: 5, enable: true }, + { id: 20, place_id: 3, group_category_id: 6, enable: true }, + { id: 21, place_id: 3, group_category_id: 7, enable: true }, + { id: 22, place_id: 4, group_category_id: 1, enable: true }, + { id: 23, place_id: 4, group_category_id: 2, enable: true }, + { id: 24, place_id: 4, group_category_id: 3, enable: true }, + { id: 25, place_id: 4, group_category_id: 4, enable: true }, + { id: 26, place_id: 4, group_category_id: 5, enable: true }, + { id: 27, place_id: 4, group_category_id: 6, enable: true }, + { id: 28, place_id: 4, group_category_id: 7, enable: true }, + { id: 29, place_id: 5, group_category_id: 1, enable: true }, + { id: 30, place_id: 5, group_category_id: 2, enable: true }, + { id: 31, place_id: 5, group_category_id: 3, enable: true }, + { id: 32, place_id: 5, group_category_id: 4, enable: true }, + { id: 33, place_id: 5, group_category_id: 5, enable: true }, + { id: 34, place_id: 5, group_category_id: 6, enable: true }, + { id: 35, place_id: 5, group_category_id: 7, enable: true }, + { id: 36, place_id: 6, group_category_id: 1, enable: true }, + { id: 37, place_id: 6, group_category_id: 2, enable: true }, + { id: 38, place_id: 6, group_category_id: 3, enable: true }, + { id: 39, place_id: 6, group_category_id: 4, enable: true }, + { id: 40, place_id: 6, group_category_id: 5, enable: true }, + { id: 41, place_id: 6, group_category_id: 6, enable: true }, + { id: 42, place_id: 6, group_category_id: 7, enable: true }, + { id: 43, place_id: 7, group_category_id: 1, enable: true }, + { id: 44, place_id: 7, group_category_id: 2, enable: true }, + { id: 45, place_id: 7, group_category_id: 3, enable: true }, + { id: 46, place_id: 7, group_category_id: 4, enable: true }, + { id: 47, place_id: 7, group_category_id: 5, enable: true }, + { id: 48, place_id: 7, group_category_id: 6, enable: true }, + { id: 49, place_id: 7, group_category_id: 7, enable: true }, + { id: 50, place_id: 8, group_category_id: 1, enable: true }, + { id: 51, place_id: 8, group_category_id: 2, enable: true }, + { id: 52, place_id: 8, group_category_id: 3, enable: true }, + { id: 53, place_id: 8, group_category_id: 4, enable: true }, + { id: 54, place_id: 8, group_category_id: 5, enable: true }, + { id: 55, place_id: 8, group_category_id: 6, enable: true }, + { id: 56, place_id: 8, group_category_id: 7, enable: true }, + { id: 57, place_id: 9, group_category_id: 1, enable: true }, + { id: 58, place_id: 9, group_category_id: 2, enable: true }, + { id: 59, place_id: 9, group_category_id: 3, enable: true }, + { id: 60, place_id: 9, group_category_id: 4, enable: true }, + { id: 61, place_id: 9, group_category_id: 5, enable: true }, + { id: 62, place_id: 9, group_category_id: 6, enable: true }, + { id: 63, place_id: 9, group_category_id: 7, enable: true }, + { id: 64, place_id: 10, group_category_id: 1, enable: true }, + { id: 65, place_id: 10, group_category_id: 2, enable: true }, + { id: 66, place_id: 10, group_category_id: 3, enable: true }, + { id: 67, place_id: 10, group_category_id: 4, enable: true }, + { id: 68, place_id: 10, group_category_id: 5, enable: true }, + { id: 69, place_id: 10, group_category_id: 6, enable: true }, + { id: 70, place_id: 10, group_category_id: 7, enable: true }, + { id: 71, place_id: 11, group_category_id: 1, enable: true }, + { id: 72, place_id: 11, group_category_id: 2, enable: true }, + { id: 73, place_id: 11, group_category_id: 3, enable: true }, + { id: 74, place_id: 11, group_category_id: 4, enable: true }, + { id: 75, place_id: 11, group_category_id: 5, enable: true }, + { id: 76, place_id: 11, group_category_id: 6, enable: true }, + { id: 77, place_id: 11, group_category_id: 7, enable: true }) diff --git a/api/db/fixtures/production/rental_item.rb b/api/db/fixtures/production/rental_item.rb index 3e70b143c..a361a761e 100644 --- a/api/db/fixtures/production/rental_item.rb +++ b/api/db/fixtures/production/rental_item.rb @@ -1,34 +1,65 @@ -RentalItem.seed( :id, - { id: 1 , name: '机' , is_inside_shop_rentable: true, is_outside_shop_rentable: true, is_stage_rentable: true }, - { id: 2 , name: '長机' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false}, - { id: 3 , name: '椅子' , is_inside_shop_rentable: true, is_outside_shop_rentable: true, is_stage_rentable: true }, - { id: 4 , name: 'パーテーション' , is_inside_shop_rentable: true, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 5 , name: 'パーテーション足' , is_inside_shop_rentable: true, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 6 , name: '掲示板' , is_inside_shop_rentable: true, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 7 , name: 'テント' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 8 , name: '小テント' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 9 , name: 'テント足' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 10 , name: 'Aスタンド' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 11 , name: 'トランシーバー' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 12 , name: 'パイロン' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 13 , name: 'パイロンおもり' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 14 , name: 'バケツ' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 15 , name: 'バケツ24下' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 16 , name: 'バケツ小' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 17 , name: 'バケツ大' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 18 , name: 'パラソル' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 19 , name: 'ブルーシート(1000*1000)' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 20 , name: 'ポリバケツ' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 21 , name: '暗幕(240*200)' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 22 , name: '暗幕(360*290)' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 23 , name: '暗幕(350*305)' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 24 , name: '拡声器' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 25 , name: '台車' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 26 , name: '電ドラ' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 27 , name: '入試課看板(1100*600)' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 28 , name: '入試課看板(1200*1200)' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 29 , name: '入試課看板(1300*600)' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 30 , name: 'トラバー(1.5m)' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 31 , name: 'トラバー(1.7m)' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, - { id: 32 , name: '配線カバー' , is_inside_shop_rentable: false, is_outside_shop_rentable: true, is_stage_rentable: false }, -) +RentalItem.seed(:id, + { id: 1, name: '机', is_inside_shop_rentable: true, is_outside_shop_rentable: true, + is_stage_rentable: true }, + { id: 2, name: '長机', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 3, name: '椅子', is_inside_shop_rentable: true, is_outside_shop_rentable: true, + is_stage_rentable: true }, + { id: 4, name: 'パーテーション', is_inside_shop_rentable: true, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 5, name: 'パーテーション足', is_inside_shop_rentable: true, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 6, name: '掲示板', is_inside_shop_rentable: true, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 7, name: 'テント', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 8, name: '小テント', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 9, name: 'テント足', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 10, name: 'Aスタンド', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 11, name: 'トランシーバー', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 12, name: 'パイロン', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 13, name: 'パイロンおもり', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 14, name: 'バケツ', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 15, name: 'バケツ24下', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 16, name: 'バケツ小', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 17, name: 'バケツ大', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 18, name: 'パラソル', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 19, name: 'ブルーシート(1000*1000)', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 20, name: 'ポリバケツ', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 21, name: '暗幕(240*200)', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 22, name: '暗幕(360*290)', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 23, name: '暗幕(350*305)', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 24, name: '拡声器', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 25, name: '台車', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 26, name: '電ドラ', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 27, name: '入試課看板(1100*600)', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 28, name: '入試課看板(1200*1200)', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 29, name: '入試課看板(1300*600)', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 30, name: 'トラバー(1.5m)', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 31, name: 'トラバー(1.7m)', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }, + { id: 32, name: '配線カバー', is_inside_shop_rentable: false, is_outside_shop_rentable: true, + is_stage_rentable: false }) diff --git a/api/db/fixtures/production/rental_item_allow_list.rb b/api/db/fixtures/production/rental_item_allow_list.rb index 0dd0f3975..d3cc6c349 100644 --- a/api/db/fixtures/production/rental_item_allow_list.rb +++ b/api/db/fixtures/production/rental_item_allow_list.rb @@ -1,72 +1,71 @@ RentalItemAllowList.seed(:id, - { id: 1 , rental_item_id: 1 , group_category_id: 1 }, - { id: 2 , rental_item_id: 1 , group_category_id: 2 }, - { id: 3 , rental_item_id: 1 , group_category_id: 3 }, - { id: 4 , rental_item_id: 1 , group_category_id: 4 }, - { id: 5 , rental_item_id: 1 , group_category_id: 5 }, - { id: 6 , rental_item_id: 1 , group_category_id: 6 }, - { id: 7 , rental_item_id: 1 , group_category_id: 7 }, - { id: 8 , rental_item_id: 2 , group_category_id: 1 }, - { id: 9 , rental_item_id: 2 , group_category_id: 2 }, - { id: 10 , rental_item_id: 2 , group_category_id: 3 }, - { id: 11 , rental_item_id: 2 , group_category_id: 4 }, - { id: 12 , rental_item_id: 2 , group_category_id: 5 }, - { id: 13 , rental_item_id: 2 , group_category_id: 6 }, - { id: 14 , rental_item_id: 2 , group_category_id: 7 }, - { id: 15 , rental_item_id: 3 , group_category_id: 1 }, - { id: 16 , rental_item_id: 3 , group_category_id: 2 }, - { id: 17 , rental_item_id: 3 , group_category_id: 3 }, - { id: 18 , rental_item_id: 3 , group_category_id: 4 }, - { id: 19 , rental_item_id: 3 , group_category_id: 5 }, - { id: 20 , rental_item_id: 3 , group_category_id: 6 }, - { id: 21 , rental_item_id: 3 , group_category_id: 7 }, - { id: 22 , rental_item_id: 4 , group_category_id: 1 }, - { id: 23 , rental_item_id: 4 , group_category_id: 2 }, - { id: 24 , rental_item_id: 4 , group_category_id: 4 }, - { id: 25 , rental_item_id: 4 , group_category_id: 5 }, - { id: 26 , rental_item_id: 4 , group_category_id: 6 }, - { id: 27 , rental_item_id: 4 , group_category_id: 7 }, - { id: 28 , rental_item_id: 5 , group_category_id: 1 }, - { id: 29 , rental_item_id: 5 , group_category_id: 2 }, - { id: 30 , rental_item_id: 5 , group_category_id: 4 }, - { id: 31 , rental_item_id: 5 , group_category_id: 5 }, - { id: 32 , rental_item_id: 5 , group_category_id: 6 }, - { id: 33 , rental_item_id: 5 , group_category_id: 7 }, - { id: 34 , rental_item_id: 6 , group_category_id: 1 }, - { id: 35 , rental_item_id: 6 , group_category_id: 2 }, - { id: 36 , rental_item_id: 6 , group_category_id: 4 }, - { id: 37 , rental_item_id: 6 , group_category_id: 5 }, - { id: 38 , rental_item_id: 6 , group_category_id: 6 }, - { id: 39 , rental_item_id: 6 , group_category_id: 7 }, - { id: 40 , rental_item_id: 7 , group_category_id: 1 }, - { id: 41 , rental_item_id: 7 , group_category_id: 2 }, - { id: 42 , rental_item_id: 7 , group_category_id: 4 }, - { id: 43 , rental_item_id: 7 , group_category_id: 5 }, - { id: 44 , rental_item_id: 7 , group_category_id: 6 }, - { id: 45 , rental_item_id: 7 , group_category_id: 7 }, - { id: 46 , rental_item_id: 8 , group_category_id: 6 }, - { id: 47 , rental_item_id: 9 , group_category_id: 6 }, - { id: 48 , rental_item_id: 10 , group_category_id: 6 }, - { id: 49 , rental_item_id: 11 , group_category_id: 6 }, - { id: 50 , rental_item_id: 12 , group_category_id: 6 }, - { id: 51 , rental_item_id: 13 , group_category_id: 6 }, - { id: 52 , rental_item_id: 14 , group_category_id: 6 }, - { id: 53 , rental_item_id: 15 , group_category_id: 6 }, - { id: 54 , rental_item_id: 16 , group_category_id: 6 }, - { id: 55 , rental_item_id: 17 , group_category_id: 6 }, - { id: 56 , rental_item_id: 18 , group_category_id: 6 }, - { id: 57 , rental_item_id: 19 , group_category_id: 6 }, - { id: 58 , rental_item_id: 20 , group_category_id: 6 }, - { id: 59 , rental_item_id: 21 , group_category_id: 6 }, - { id: 60 , rental_item_id: 22 , group_category_id: 6 }, - { id: 61 , rental_item_id: 23 , group_category_id: 6 }, - { id: 62 , rental_item_id: 24 , group_category_id: 6 }, - { id: 63 , rental_item_id: 25 , group_category_id: 6 }, - { id: 64 , rental_item_id: 26 , group_category_id: 6 }, - { id: 65 , rental_item_id: 27 , group_category_id: 6 }, - { id: 66 , rental_item_id: 28 , group_category_id: 6 }, - { id: 67 , rental_item_id: 29 , group_category_id: 6 }, - { id: 68 , rental_item_id: 30 , group_category_id: 6 }, - { id: 69 , rental_item_id: 31 , group_category_id: 6 }, - { id: 70 , rental_item_id: 32 , group_category_id: 6 } -) + { id: 1, rental_item_id: 1, group_category_id: 1 }, + { id: 2, rental_item_id: 1, group_category_id: 2 }, + { id: 3, rental_item_id: 1, group_category_id: 3 }, + { id: 4, rental_item_id: 1, group_category_id: 4 }, + { id: 5, rental_item_id: 1, group_category_id: 5 }, + { id: 6, rental_item_id: 1, group_category_id: 6 }, + { id: 7, rental_item_id: 1, group_category_id: 7 }, + { id: 8, rental_item_id: 2, group_category_id: 1 }, + { id: 9, rental_item_id: 2, group_category_id: 2 }, + { id: 10, rental_item_id: 2, group_category_id: 3 }, + { id: 11, rental_item_id: 2, group_category_id: 4 }, + { id: 12, rental_item_id: 2, group_category_id: 5 }, + { id: 13, rental_item_id: 2, group_category_id: 6 }, + { id: 14, rental_item_id: 2, group_category_id: 7 }, + { id: 15, rental_item_id: 3, group_category_id: 1 }, + { id: 16, rental_item_id: 3, group_category_id: 2 }, + { id: 17, rental_item_id: 3, group_category_id: 3 }, + { id: 18, rental_item_id: 3, group_category_id: 4 }, + { id: 19, rental_item_id: 3, group_category_id: 5 }, + { id: 20, rental_item_id: 3, group_category_id: 6 }, + { id: 21, rental_item_id: 3, group_category_id: 7 }, + { id: 22, rental_item_id: 4, group_category_id: 1 }, + { id: 23, rental_item_id: 4, group_category_id: 2 }, + { id: 24, rental_item_id: 4, group_category_id: 4 }, + { id: 25, rental_item_id: 4, group_category_id: 5 }, + { id: 26, rental_item_id: 4, group_category_id: 6 }, + { id: 27, rental_item_id: 4, group_category_id: 7 }, + { id: 28, rental_item_id: 5, group_category_id: 1 }, + { id: 29, rental_item_id: 5, group_category_id: 2 }, + { id: 30, rental_item_id: 5, group_category_id: 4 }, + { id: 31, rental_item_id: 5, group_category_id: 5 }, + { id: 32, rental_item_id: 5, group_category_id: 6 }, + { id: 33, rental_item_id: 5, group_category_id: 7 }, + { id: 34, rental_item_id: 6, group_category_id: 1 }, + { id: 35, rental_item_id: 6, group_category_id: 2 }, + { id: 36, rental_item_id: 6, group_category_id: 4 }, + { id: 37, rental_item_id: 6, group_category_id: 5 }, + { id: 38, rental_item_id: 6, group_category_id: 6 }, + { id: 39, rental_item_id: 6, group_category_id: 7 }, + { id: 40, rental_item_id: 7, group_category_id: 1 }, + { id: 41, rental_item_id: 7, group_category_id: 2 }, + { id: 42, rental_item_id: 7, group_category_id: 4 }, + { id: 43, rental_item_id: 7, group_category_id: 5 }, + { id: 44, rental_item_id: 7, group_category_id: 6 }, + { id: 45, rental_item_id: 7, group_category_id: 7 }, + { id: 46, rental_item_id: 8, group_category_id: 6 }, + { id: 47, rental_item_id: 9, group_category_id: 6 }, + { id: 48, rental_item_id: 10, group_category_id: 6 }, + { id: 49, rental_item_id: 11, group_category_id: 6 }, + { id: 50, rental_item_id: 12, group_category_id: 6 }, + { id: 51, rental_item_id: 13, group_category_id: 6 }, + { id: 52, rental_item_id: 14, group_category_id: 6 }, + { id: 53, rental_item_id: 15, group_category_id: 6 }, + { id: 54, rental_item_id: 16, group_category_id: 6 }, + { id: 55, rental_item_id: 17, group_category_id: 6 }, + { id: 56, rental_item_id: 18, group_category_id: 6 }, + { id: 57, rental_item_id: 19, group_category_id: 6 }, + { id: 58, rental_item_id: 20, group_category_id: 6 }, + { id: 59, rental_item_id: 21, group_category_id: 6 }, + { id: 60, rental_item_id: 22, group_category_id: 6 }, + { id: 61, rental_item_id: 23, group_category_id: 6 }, + { id: 62, rental_item_id: 24, group_category_id: 6 }, + { id: 63, rental_item_id: 25, group_category_id: 6 }, + { id: 64, rental_item_id: 26, group_category_id: 6 }, + { id: 65, rental_item_id: 27, group_category_id: 6 }, + { id: 66, rental_item_id: 28, group_category_id: 6 }, + { id: 67, rental_item_id: 29, group_category_id: 6 }, + { id: 68, rental_item_id: 30, group_category_id: 6 }, + { id: 69, rental_item_id: 31, group_category_id: 6 }, + { id: 70, rental_item_id: 32, group_category_id: 6 }) diff --git a/api/db/fixtures/production/role.rb b/api/db/fixtures/production/role.rb index c4de9e1af..0557c9254 100644 --- a/api/db/fixtures/production/role.rb +++ b/api/db/fixtures/production/role.rb @@ -1,6 +1,5 @@ -Role.seed( :id, - { id: 1, name: 'developer' }, - { id: 2, name: 'manager' }, - { id: 3, name: 'staff' }, - { id: 4, name: 'user' }, -) +Role.seed(:id, + { id: 1, name: 'developer' }, + { id: 2, name: 'manager' }, + { id: 3, name: 'staff' }, + { id: 4, name: 'user' }) diff --git a/api/db/fixtures/production/shop.rb b/api/db/fixtures/production/shop.rb index 400c63c3f..ff53baf02 100644 --- a/api/db/fixtures/production/shop.rb +++ b/api/db/fixtures/production/shop.rb @@ -1,147 +1,117 @@ -Shop.seed( :id, - { id: 1 , name: 'アピタ長岡店' , - tel: '0258-29-6111' , - opening_hours: '09:00 - 21:00' , - address: '新潟県長岡市千秋 2丁目 278 リバーサイド千秋 1F' - }, - { id: 2 , name: 'イオン長岡店' , - tel: '0258-28-0880' , - opening_hours: '07:00 - 22:00' , - address: '新潟県長岡市古正寺 1-249-1' - }, - { id: 3 , name: 'ウオロク 北山店' , - tel: '0258-25-8333' , - opening_hours: '09:00 - 22:00' , - address: '新潟県長岡市北山 3 丁目 5-1' - }, - { id: 4 , name: 'ウオロク 長岡店' , - tel: '0258-38-8800' , - opening_hours: '09:00 - 24:00' , - address: '新潟県長岡市日赤町 2丁目 6-1' - }, - { id: 5 , name: 'カトウ食材' , - tel: '0258-46-1170' , - opening_hours: '05:00 - 18:00' , - address: '新潟県長岡市新産 1丁目 1-16' - }, - { id: 6 , name: '業務スーパー 中沢店' , - tel: '0258-38-8200' , - opening_hours: '09:00 - 20:00' , - address: '新潟県長岡市美沢 3丁目 86-9' - }, - { id: 7 , name: 'サンマート' , - tel: '0258-28-1488' , - opening_hours: '10:00 - 20:00' , - address: '新潟県長岡市北山 4丁目 37-3' - }, - { id: 8 , name: 'スーパーセンタームサシ' , - tel: '0258-27-6345' , - opening_hours: '07:00 - 19:30' , - address: '新潟県長岡市古正寺町字中割 64' - }, - { id: 9 , name: 'チャレンジャー 北長岡店' , - tel: '0258-88-0050' , - opening_hours: '09:00 - 21:00' , - address: '新潟県長岡市城岡 1-1-10' - }, - { id: 10, name: 'ドン・キホーテ 長岡インター店' , - tel: '0258-46-0311' , - opening_hours: '00:00 - 03:00 10:00 - 24:00' , - address: '新潟県長岡市福山町 1078' - }, - { id: 11, name: 'ナルス 大島店' , - tel: '0258-20-5800' , - opening_hours: '09:00 - 22:00' , - address: '' - }, - { id: 12, name: 'なんじゃ村' , - tel: '0258-22-5511' , - opening_hours: '10:00 - 20:00' , - address: '新潟県長岡市喜多町 398-1' - }, - { id: 13, name: '原信 今朝白店' , - tel: '0258-39-1311' , - opening_hours: '00:00 - 24:00' , - address: '新潟県長岡市今朝白 2丁目 5' - }, - { id: 14, name: '原信 古正寺店' , - tel: '0258-28-5590' , - opening_hours: '00:00 - 24:00' , - address: '新潟県長岡市古正寺町 20-1' - }, - { id: 15, name: '原信 関原店' , - tel: '0258-46-6585' , - opening_hours: '09:00 - 22:00' , - address: '新潟県長岡市関原町 1丁目 957-1' - }, - { id: 16, name: '原信 寺島店' , - tel: '0258-28-5868' , - opening_hours: '07:00 - 24:00' , - address: '新潟県長岡市寺島町 7-1' - }, - { id: 17, name: '原信 来迎寺店' , - tel: '0258-92-2090' , - opening_hours: '09:00 - 23:00' , - address: '新潟県長岡市浦 610' - }, - { id: 18, name: 'PLANT-5 見附店' , - tel: '0258-61-4400' , - opening_hours: '09:00 - 22:00' , - address: '新潟県見附市上新田町 725-1' - }, - { id: 19, name: '三和園茶舗' , - tel: '0258-32-1105' , - opening_hours: '08:00 - 18:00' , - address: '新潟県長岡市千手 3丁目 7-8' - }, - { id: 20, name: '大和屋 本店' , - tel: '0258-35-3533' , - opening_hours: '09:00 - 17:30' , - address: '新潟県長岡市柳原町 3-3' - }, - { id: 21, name: 'やまや' , - tel: '0258-22-5066' , - opening_hours: '09:00 - 21:00' , - address: '新潟県長岡市大島新町 4-892' - }, - { id: 22, name: 'リカードコミュニケーション おぐまや' , - tel: '0258-27-0709' , - opening_hours: '08:00 - 20:00' , - address: '新潟県長岡市蓮潟 4-6-14' - }, - { id: 23, name: '良食生活館 きたまち店' , - tel: '0258-28-2855' , - opening_hours: '10:00 - 22:00' , - address: '新潟県長岡市喜多町字下川原 1000-1' - }, - { id: 24, name: '山ス流通サービス株式会社' , - tel: '0258-27-4638' , - opening_hours: '08:00 - 16:30' , - address: '新潟県長岡市喜多町 1015' - }, - { id: 25, name: '菜加' , - tel: '0258-89-2669' , - opening_hours: '08:00 - 18:00' , - address: '新潟県東川口 1939' - }, - { id: 26, name: 'ひらせい 長岡ニュータウン店' , - tel: '0258-47-8889' , - opening_hours: '09:30 - 20:00' , - address: '新潟県長岡市青葉台 1丁目甲 120-17' - }, - { id: 27, name: '紅屋重正' , - tel: '0258-32-1456' , - opening_hours: '09:00 - 17:30' , - address: '新潟県長岡市表町 1丁目 10 番地 35' - }, - { id: 28, name: 'ダイレックス喜多町店' , - tel: '0258-94-5896' , - opening_hours: '09:00 - 22:00' , - address: '新潟県長岡市喜多町土地区画整理事業内 4 街区 3' - }, - { id: 29, name: 'ネット注文' , - tel: '' , - opening_hours: '' , - address: '' -}, -) +Shop.seed(:id, + { id: 1, name: 'アピタ長岡店', + tel: '0258-29-6111', + opening_hours: '09:00 - 21:00', + address: '新潟県長岡市千秋 2丁目 278 リバーサイド千秋 1F' }, + { id: 2, name: 'イオン長岡店', + tel: '0258-28-0880', + opening_hours: '07:00 - 22:00', + address: '新潟県長岡市古正寺 1-249-1' }, + { id: 3, name: 'ウオロク 北山店', + tel: '0258-25-8333', + opening_hours: '09:00 - 22:00', + address: '新潟県長岡市北山 3 丁目 5-1' }, + { id: 4, name: 'ウオロク 長岡店', + tel: '0258-38-8800', + opening_hours: '09:00 - 24:00', + address: '新潟県長岡市日赤町 2丁目 6-1' }, + { id: 5, name: 'カトウ食材', + tel: '0258-46-1170', + opening_hours: '05:00 - 18:00', + address: '新潟県長岡市新産 1丁目 1-16' }, + { id: 6, name: '業務スーパー 中沢店', + tel: '0258-38-8200', + opening_hours: '09:00 - 20:00', + address: '新潟県長岡市美沢 3丁目 86-9' }, + { id: 7, name: 'サンマート', + tel: '0258-28-1488', + opening_hours: '10:00 - 20:00', + address: '新潟県長岡市北山 4丁目 37-3' }, + { id: 8, name: 'スーパーセンタームサシ', + tel: '0258-27-6345', + opening_hours: '07:00 - 19:30', + address: '新潟県長岡市古正寺町字中割 64' }, + { id: 9, name: 'チャレンジャー 北長岡店', + tel: '0258-88-0050', + opening_hours: '09:00 - 21:00', + address: '新潟県長岡市城岡 1-1-10' }, + { id: 10, name: 'ドン・キホーテ 長岡インター店', + tel: '0258-46-0311', + opening_hours: '00:00 - 03:00 10:00 - 24:00', + address: '新潟県長岡市福山町 1078' }, + { id: 11, name: 'ナルス 大島店', + tel: '0258-20-5800', + opening_hours: '09:00 - 22:00', + address: '' }, + { id: 12, name: 'なんじゃ村', + tel: '0258-22-5511', + opening_hours: '10:00 - 20:00', + address: '新潟県長岡市喜多町 398-1' }, + { id: 13, name: '原信 今朝白店', + tel: '0258-39-1311', + opening_hours: '00:00 - 24:00', + address: '新潟県長岡市今朝白 2丁目 5' }, + { id: 14, name: '原信 古正寺店', + tel: '0258-28-5590', + opening_hours: '00:00 - 24:00', + address: '新潟県長岡市古正寺町 20-1' }, + { id: 15, name: '原信 関原店', + tel: '0258-46-6585', + opening_hours: '09:00 - 22:00', + address: '新潟県長岡市関原町 1丁目 957-1' }, + { id: 16, name: '原信 寺島店', + tel: '0258-28-5868', + opening_hours: '07:00 - 24:00', + address: '新潟県長岡市寺島町 7-1' }, + { id: 17, name: '原信 来迎寺店', + tel: '0258-92-2090', + opening_hours: '09:00 - 23:00', + address: '新潟県長岡市浦 610' }, + { id: 18, name: 'PLANT-5 見附店', + tel: '0258-61-4400', + opening_hours: '09:00 - 22:00', + address: '新潟県見附市上新田町 725-1' }, + { id: 19, name: '三和園茶舗', + tel: '0258-32-1105', + opening_hours: '08:00 - 18:00', + address: '新潟県長岡市千手 3丁目 7-8' }, + { id: 20, name: '大和屋 本店', + tel: '0258-35-3533', + opening_hours: '09:00 - 17:30', + address: '新潟県長岡市柳原町 3-3' }, + { id: 21, name: 'やまや', + tel: '0258-22-5066', + opening_hours: '09:00 - 21:00', + address: '新潟県長岡市大島新町 4-892' }, + { id: 22, name: 'リカードコミュニケーション おぐまや', + tel: '0258-27-0709', + opening_hours: '08:00 - 20:00', + address: '新潟県長岡市蓮潟 4-6-14' }, + { id: 23, name: '良食生活館 きたまち店', + tel: '0258-28-2855', + opening_hours: '10:00 - 22:00', + address: '新潟県長岡市喜多町字下川原 1000-1' }, + { id: 24, name: '山ス流通サービス株式会社', + tel: '0258-27-4638', + opening_hours: '08:00 - 16:30', + address: '新潟県長岡市喜多町 1015' }, + { id: 25, name: '菜加', + tel: '0258-89-2669', + opening_hours: '08:00 - 18:00', + address: '新潟県東川口 1939' }, + { id: 26, name: 'ひらせい 長岡ニュータウン店', + tel: '0258-47-8889', + opening_hours: '09:30 - 20:00', + address: '新潟県長岡市青葉台 1丁目甲 120-17' }, + { id: 27, name: '紅屋重正', + tel: '0258-32-1456', + opening_hours: '09:00 - 17:30', + address: '新潟県長岡市表町 1丁目 10 番地 35' }, + { id: 28, name: 'ダイレックス喜多町店', + tel: '0258-94-5896', + opening_hours: '09:00 - 22:00', + address: '新潟県長岡市喜多町土地区画整理事業内 4 街区 3' }, + { id: 29, name: 'ネット注文', + tel: '', + opening_hours: '', + address: '' }) diff --git a/api/db/fixtures/production/stage.rb b/api/db/fixtures/production/stage.rb index 00413de3f..3dad214ba 100644 --- a/api/db/fixtures/production/stage.rb +++ b/api/db/fixtures/production/stage.rb @@ -1,6 +1,5 @@ -Stage.seed( :id, - { id: 1, name: '希望なし' , enable_sunny: true, enable_rainy: true }, - { id: 2, name: 'メインステージ' , enable_sunny: true, enable_rainy: false }, - { id: 3, name: '体育館' , enable_sunny: true, enable_rainy: true }, - { id: 5, name: '武道館' , enable_sunny: true, enable_rainy: true }, -) +Stage.seed(:id, + { id: 1, name: '希望なし', enable_sunny: true, enable_rainy: true }, + { id: 2, name: 'メインステージ', enable_sunny: true, enable_rainy: false }, + { id: 3, name: '体育館', enable_sunny: true, enable_rainy: true }, + { id: 5, name: '武道館', enable_sunny: true, enable_rainy: true }) diff --git a/api/db/fixtures/production/stocker_place.rb b/api/db/fixtures/production/stocker_place.rb index fb77dc1d2..a2f5ca2d4 100644 --- a/api/db/fixtures/production/stocker_place.rb +++ b/api/db/fixtures/production/stocker_place.rb @@ -1,33 +1,32 @@ -StockerPlace.seed( :id, - { id: 1 , name: '講義棟103', stock_item_status: 1, assign_item_status: 1 } , - { id: 2 , name: '講義棟104', stock_item_status: 1, assign_item_status: 1 } , - { id: 3 , name: '講義棟105', stock_item_status: 1, assign_item_status: 1 } , - { id: 4 , name: '講義棟106', stock_item_status: 1, assign_item_status: 1 } , - { id: 5 , name: '講義棟201', stock_item_status: 1, assign_item_status: 1 } , - { id: 6 , name: '講義棟203', stock_item_status: 1, assign_item_status: 1 } , - { id: 7 , name: '講義棟205', stock_item_status: 1, assign_item_status: 1 } , - { id: 8 , name: '講義棟206', stock_item_status: 1, assign_item_status: 1 } , - { id: 9 , name: '講義棟207', stock_item_status: 1, assign_item_status: 1 } , - { id: 10 , name: '講義棟208', stock_item_status: 1, assign_item_status: 1 } , - { id: 11 , name: '講義棟209', stock_item_status: 1, assign_item_status: 1 } , - { id: 12 , name: '講義棟210', stock_item_status: 1, assign_item_status: 1 } , - { id: 13 , name: '講義棟301', stock_item_status: 1, assign_item_status: 1 } , - { id: 14 , name: '講義棟302', stock_item_status: 1, assign_item_status: 1 } , - { id: 15 , name: '講義棟303', stock_item_status: 1, assign_item_status: 1 } , - { id: 16 , name: '講義棟304', stock_item_status: 1, assign_item_status: 1 } , - { id: 17 , name: '講義棟305', stock_item_status: 1, assign_item_status: 1 } , - { id: 18 , name: '講義棟306', stock_item_status: 1, assign_item_status: 1 } , - { id: 19 , name: 'AL3', stock_item_status: 1, assign_item_status: 1 } , - { id: 20 , name: '課外活動共用施設', stock_item_status: 1, assign_item_status: 1 } , - { id: 21 , name: '本部', stock_item_status: 1, assign_item_status: 1 }, - { id: 22 , name: 'セコム会議室', stock_item_status: 1, assign_item_status: 1 } , - { id: 23 , name: '24下倉庫', stock_item_status: 1, assign_item_status: 1 } , - { id: 24 , name: 'グラウンド器具庫', stock_item_status: 1, assign_item_status: 1 } , - { id: 25 , name: '116倉庫', stock_item_status: 1, assign_item_status: 1 } , - { id: 26 , name: '入試課倉庫', stock_item_status: 1, assign_item_status: 1 } , - { id: 27 , name: '地域防災実践研究センター', stock_item_status: 1, assign_item_status: 1 } , - { id: 28 , name: '施設課', stock_item_status: 1, assign_item_status: 1 } , - { id: 29 , name: '電気棟事務室', stock_item_status: 1, assign_item_status: 1 } , - { id: 30 , name: '機械棟事務室', stock_item_status: 1, assign_item_status: 1 } , - { id: 31 , name: '体育館', stock_item_status: 1, assign_item_status: 1 } , -) +StockerPlace.seed(:id, + { id: 1, name: '講義棟103', stock_item_status: 1, assign_item_status: 1 }, + { id: 2, name: '講義棟104', stock_item_status: 1, assign_item_status: 1 }, + { id: 3, name: '講義棟105', stock_item_status: 1, assign_item_status: 1 }, + { id: 4, name: '講義棟106', stock_item_status: 1, assign_item_status: 1 }, + { id: 5, name: '講義棟201', stock_item_status: 1, assign_item_status: 1 }, + { id: 6, name: '講義棟203', stock_item_status: 1, assign_item_status: 1 }, + { id: 7, name: '講義棟205', stock_item_status: 1, assign_item_status: 1 }, + { id: 8, name: '講義棟206', stock_item_status: 1, assign_item_status: 1 }, + { id: 9, name: '講義棟207', stock_item_status: 1, assign_item_status: 1 }, + { id: 10, name: '講義棟208', stock_item_status: 1, assign_item_status: 1 }, + { id: 11, name: '講義棟209', stock_item_status: 1, assign_item_status: 1 }, + { id: 12, name: '講義棟210', stock_item_status: 1, assign_item_status: 1 }, + { id: 13, name: '講義棟301', stock_item_status: 1, assign_item_status: 1 }, + { id: 14, name: '講義棟302', stock_item_status: 1, assign_item_status: 1 }, + { id: 15, name: '講義棟303', stock_item_status: 1, assign_item_status: 1 }, + { id: 16, name: '講義棟304', stock_item_status: 1, assign_item_status: 1 }, + { id: 17, name: '講義棟305', stock_item_status: 1, assign_item_status: 1 }, + { id: 18, name: '講義棟306', stock_item_status: 1, assign_item_status: 1 }, + { id: 19, name: 'AL3', stock_item_status: 1, assign_item_status: 1 }, + { id: 20, name: '課外活動共用施設', stock_item_status: 1, assign_item_status: 1 }, + { id: 21, name: '本部', stock_item_status: 1, assign_item_status: 1 }, + { id: 22, name: 'セコム会議室', stock_item_status: 1, assign_item_status: 1 }, + { id: 23, name: '24下倉庫', stock_item_status: 1, assign_item_status: 1 }, + { id: 24, name: 'グラウンド器具庫', stock_item_status: 1, assign_item_status: 1 }, + { id: 25, name: '116倉庫', stock_item_status: 1, assign_item_status: 1 }, + { id: 26, name: '入試課倉庫', stock_item_status: 1, assign_item_status: 1 }, + { id: 27, name: '地域防災実践研究センター', stock_item_status: 1, assign_item_status: 1 }, + { id: 28, name: '施設課', stock_item_status: 1, assign_item_status: 1 }, + { id: 29, name: '電気棟事務室', stock_item_status: 1, assign_item_status: 1 }, + { id: 30, name: '機械棟事務室', stock_item_status: 1, assign_item_status: 1 }, + { id: 31, name: '体育館', stock_item_status: 1, assign_item_status: 1 }) diff --git a/api/db/fixtures/production/stool_test.rb b/api/db/fixtures/production/stool_test.rb index 8baad4477..ab6b83e34 100644 --- a/api/db/fixtures/production/stool_test.rb +++ b/api/db/fixtures/production/stool_test.rb @@ -1,5 +1,4 @@ -StoolTest.seed( :id, - { id: 1, status: '検便準備中' }, - { id: 2, status: '検便無' }, - { id: 3, status: '検便有' }, -) +StoolTest.seed(:id, + { id: 1, status: '検便準備中' }, + { id: 2, status: '検便無' }, + { id: 3, status: '検便有' }) diff --git a/api/db/fixtures/production/user.rb b/api/db/fixtures/production/user.rb index 9066de388..fec1577e9 100644 --- a/api/db/fixtures/production/user.rb +++ b/api/db/fixtures/production/user.rb @@ -1,49 +1,40 @@ -User.seed( :id, - { id: 1 , name: '管理者' , - email: 'admin@email.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 2 , name: '原田典' , - email: '22.t.harata.nutfes@gmail.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 3 , name: '秋山峰' , - email: '23.m.akiyama.nutfes@gmail.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 4 , name: '飯田庸介' , - email: '23.y.iida.nutfes@gmail.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 5 , name: '小武壮太' , - email: '21.s.kotake.nutfes@gmail.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 6 , name: '髙須賀拓実' , - email: '23.t.takasuka.nutfes@gmail.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 7 , name: '若月耕紀' , - email: '23.k.wakatsuki.nutfes@gmail.com' , - password: 'gidaifes' , - password_confirmation: 'gidaifes' , - role_id: 1 - }, - { id: 8 , name: '二川倫' , - email: '22.r.futagawa.nutfes@gmail.com' , - password: 'gidaifes' , - role_id: 1 - }, -) +User.seed(:id, + { id: 1, name: '管理者', + email: 'admin@email.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 2, name: '原田典', + email: '22.t.harata.nutfes@gmail.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 3, name: '秋山峰', + email: '23.m.akiyama.nutfes@gmail.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 4, name: '飯田庸介', + email: '23.y.iida.nutfes@gmail.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 5, name: '小武壮太', + email: '21.s.kotake.nutfes@gmail.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 6, name: '髙須賀拓実', + email: '23.t.takasuka.nutfes@gmail.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 7, name: '若月耕紀', + email: '23.k.wakatsuki.nutfes@gmail.com', + password: 'gidaifes', + password_confirmation: 'gidaifes', + role_id: 1 }, + { id: 8, name: '二川倫', + email: '22.r.futagawa.nutfes@gmail.com', + password: 'gidaifes', + role_id: 1 }) diff --git a/api/db/fixtures/production/user_detail.rb b/api/db/fixtures/production/user_detail.rb index be6c1ca0c..5bd76a8bb 100644 --- a/api/db/fixtures/production/user_detail.rb +++ b/api/db/fixtures/production/user_detail.rb @@ -1,44 +1,36 @@ -UserDetail.seed( :id, - { id: 1 , tel: '11111111111' , - grade_id: 1 , - department_id: 1 , - user_id: 1 , - student_id: 11111111 - }, - { id: 2 , tel: '09080921876' , - grade_id: 5 , - department_id: 5 , - user_id: 2 , - student_id: 17101884 - }, - { id: 3 , tel: '11111111111' , - grade_id: 4 , - department_id: 7 , - user_id: 3 , - student_id: 11111111 - }, - { id: 4 , tel: '11111111111' , - grade_id: 4 , - department_id: 5 , - user_id: 4 , - student_id: 11111111 - }, - { id: 5 , tel: '11111111111' , - grade_id: 4 , - department_id: 5 , - user_id: 5 , - student_id: 11111111 - }, - { id: 6 , tel: '11111111111' , - grade_id: 4 , - department_id: 5 , - user_id: 6 , - student_id: 11111111 - }, - { id: 7 , tel: '11111111111' , - grade_id: 4 , - department_id: 5 , - user_id: 7 , - student_id: 11111111 - }, -) +UserDetail.seed(:id, + { id: 1, tel: '11111111111', + grade_id: 1, + department_id: 1, + user_id: 1, + student_id: 11_111_111 }, + { id: 2, tel: '09080921876', + grade_id: 5, + department_id: 5, + user_id: 2, + student_id: 17_101_884 }, + { id: 3, tel: '11111111111', + grade_id: 4, + department_id: 7, + user_id: 3, + student_id: 11_111_111 }, + { id: 4, tel: '11111111111', + grade_id: 4, + department_id: 5, + user_id: 4, + student_id: 11_111_111 }, + { id: 5, tel: '11111111111', + grade_id: 4, + department_id: 5, + user_id: 5, + student_id: 11_111_111 }, + { id: 6, tel: '11111111111', + grade_id: 4, + department_id: 5, + user_id: 6, + student_id: 11_111_111 }, + { id: 7, tel: '11111111111', + grade_id: 4, + department_id: 5, + user_id: 7, + student_id: 11_111_111 }) diff --git a/api/db/fixtures/production/user_page_setting.rb b/api/db/fixtures/production/user_page_setting.rb index c66290c3c..4e83db48c 100644 --- a/api/db/fixtures/production/user_page_setting.rb +++ b/api/db/fixtures/production/user_page_setting.rb @@ -1,28 +1,26 @@ -UserPageSetting.seed( :id, - { id: 1 , is_regist_group: true, - is_regist_food_product: true, - is_edit_group: true, - is_edit_sub_rep: true, - is_edit_place: true, - is_edit_power_order: true, - is_edit_rental_order: true, - is_edit_stage_order: true, - is_edit_employee: true, - is_edit_food_product: true, - is_edit_purchase_list: true, - is_edit_announcement: true, - add_power_order: true, - add_rental_order: true, - add_employee: true, - add_food_product: true, - add_purchase_list: true, - add_announcement: true, - fes_year_id: 1, - is_edit_user: true, - is_edit_stage_common_option: true, - is_edit_public_relation: true, - is_edit_venue_map: true, - is_edit_cooking_process: true, - add_stage_order: true - } -) \ No newline at end of file +UserPageSetting.seed(:id, + { id: 1, is_regist_group: true, + is_regist_food_product: true, + is_edit_group: true, + is_edit_sub_rep: true, + is_edit_place: true, + is_edit_power_order: true, + is_edit_rental_order: true, + is_edit_stage_order: true, + is_edit_employee: true, + is_edit_food_product: true, + is_edit_purchase_list: true, + is_edit_announcement: true, + add_power_order: true, + add_rental_order: true, + add_employee: true, + add_food_product: true, + add_purchase_list: true, + add_announcement: true, + fes_year_id: 1, + is_edit_user: true, + is_edit_stage_common_option: true, + is_edit_public_relation: true, + is_edit_venue_map: true, + is_edit_cooking_process: true, + add_stage_order: true }) diff --git a/api/db/migrate/20200720152841_devise_token_auth_create_users.rb b/api/db/migrate/20200720152841_devise_token_auth_create_users.rb index f6eb3109c..30528ead2 100644 --- a/api/db/migrate/20200720152841_devise_token_auth_create_users.rb +++ b/api/db/migrate/20200720152841_devise_token_auth_create_users.rb @@ -1,18 +1,17 @@ class DeviseTokenAuthCreateUsers < ActiveRecord::Migration[6.0] def change - create_table(:users) do |t| ## Required - t.string :provider, :null => false, :default => "email" - t.string :uid, :null => false, :default => "" + t.string :provider, null: false, default: 'email' + t.string :uid, null: false, default: '' ## Database authenticatable - t.string :encrypted_password, :null => false, :default => "" + t.string :encrypted_password, null: false, default: '' ## Recoverable t.string :reset_password_token t.datetime :reset_password_sent_at - t.boolean :allow_password_change, :default => false + t.boolean :allow_password_change, default: false ## Rememberable t.datetime :remember_created_at @@ -46,8 +45,8 @@ def change t.timestamps end - add_index :users, :email, unique: true - add_index :users, [:uid, :provider], unique: true + add_index :users, :email, unique: true + add_index :users, %i[uid provider], unique: true add_index :users, :reset_password_token, unique: true add_index :users, :confirmation_token, unique: true # add_index :users, :unlock_token, unique: true diff --git a/api/db/migrate/20240307061007_create_item_adjustments.rb b/api/db/migrate/20240307061007_create_item_adjustments.rb index 889b35d5f..5800bd94f 100644 --- a/api/db/migrate/20240307061007_create_item_adjustments.rb +++ b/api/db/migrate/20240307061007_create_item_adjustments.rb @@ -1,7 +1,6 @@ class CreateItemAdjustments < ActiveRecord::Migration[6.1] def change create_table :item_adjustments do |t| - t.integer :group_id t.integer :use_place_id t.integer :rental_place_id @@ -11,7 +10,7 @@ def change t.datetime :time_start t.datetime :time_end t.integer :date_id - + t.timestamps end end diff --git a/api/db/migrate/20240522012844_modify_cooking_process_orders.rb b/api/db/migrate/20240522012844_modify_cooking_process_orders.rb index 610a171eb..2ca1d9488 100644 --- a/api/db/migrate/20240522012844_modify_cooking_process_orders.rb +++ b/api/db/migrate/20240522012844_modify_cooking_process_orders.rb @@ -11,4 +11,4 @@ def change t.text :tent end end -end \ No newline at end of file +end diff --git a/api/db/schema.rb b/api/db/schema.rb index a5419cc45..7bca0c86c 100644 --- a/api/db/schema.rb +++ b/api/db/schema.rb @@ -10,435 +10,434 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2024_05_22_012844) do - - create_table "announcements", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.integer "group_id" - t.text "message" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - t.string "status" +ActiveRecord::Schema.define(version: 20_240_522_012_844) do + create_table 'announcements', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.integer 'group_id' + t.text 'message' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + t.string 'status' + end + + create_table 'assign_group_places', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.integer 'place_order_id' + t.integer 'place_id' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false end - - create_table "assign_group_places", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.integer "place_order_id" - t.integer "place_id" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - create_table "assign_rental_items", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.integer "group_id" - t.integer "rental_item_id" - t.integer "num" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - t.integer "stocker_place_id" - end - - create_table "assign_stages", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.integer "stage_order_id" - t.integer "stage_id" - t.string "time_point_start" - t.string "time_point_end" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - create_table "contact_people", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.integer "group_id" - t.string "name" - t.string "email" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - create_table "cooking_process_orders", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.bigint "group_id", null: false - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - t.boolean "pre_open_kitchen", default: false, null: false - t.boolean "during_open_kitchen", default: false, null: false - t.text "tent" - t.index ["group_id"], name: "index_cooking_process_orders_on_group_id" - end - - create_table "current_stocks", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.integer "place_category_id" - t.integer "place_id" - t.integer "item_id" - t.integer "stock_num" - t.integer "date_id" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - create_table "departments", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.string "name" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - create_table "employees", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.integer "group_id" - t.string "name" - t.integer "student_id" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - t.integer "stool_test_id" - end - - create_table "fes_dates", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.integer "days_num" - t.string "date" - t.string "day" - t.integer "fes_year_id" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - create_table "fes_years", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.integer "year_num" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - create_table "food_products", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.integer "group_id" - t.string "name" - t.boolean "is_cooking" - t.integer "first_day_num" - t.integer "second_day_num" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - create_table "grades", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.string "name" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - create_table "group_categories", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.string "name" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - create_table "group_identifications", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.integer "group_id" - t.integer "number" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - create_table "groups", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.string "name" - t.string "project_name" - t.text "activity" - t.integer "user_id" - t.integer "group_category_id" - t.integer "fes_year_id" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - t.boolean "committee" - t.boolean "is_international" - t.boolean "is_external" - end - - create_table "item_adjustments", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.integer "group_id" - t.integer "use_place_id" - t.integer "rental_place_id" - t.integer "item_id" - t.integer "item_num" - t.integer "people_num" - t.datetime "time_start" - t.datetime "time_end" - t.integer "date_id" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - create_table "memos", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.text "content" - t.integer "user_id" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - create_table "news", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.string "title" - t.text "body" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - create_table "place_allow_lists", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.integer "place_id" - t.integer "group_category_id" - t.boolean "enable" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - create_table "place_numbers", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.integer "place_id" - t.integer "group_identification_id" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - create_table "place_orders", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.integer "group_id" - t.integer "first" - t.integer "second" - t.integer "third" - t.text "remark" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - create_table "places", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.string "name" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - create_table "power_orders", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.integer "group_id" - t.string "item" - t.integer "power" - t.string "manufacturer" - t.string "model" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - t.string "item_url" - end - - create_table "public_relations", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.integer "group_id" - t.string "picture_name" - t.string "picture_path" - t.text "blurb" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - create_table "purchase_lists", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.integer "food_product_id" - t.integer "shop_id" - t.integer "fes_date_id" - t.string "items" - t.boolean "is_fresh" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - t.string "purchase_date" - t.string "url" - end - - create_table "rentable_items", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.integer "stocker_item_id" - t.integer "stocker_place_id" - t.integer "max_num" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - create_table "rental_item_allow_lists", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.integer "rental_item_id" - t.integer "group_category_id" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - create_table "rental_items", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.string "name" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - t.boolean "is_stage_rentable" - t.boolean "is_inside_shop_rentable" - t.boolean "is_outside_shop_rentable" - end - - create_table "rental_orders", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.integer "group_id" - t.integer "rental_item_id" - t.integer "num" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - create_table "roles", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.string "name" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - create_table "shops", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.string "name" - t.string "tel" - t.string "opening_hours" - t.string "address" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - create_table "stage_common_options", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.integer "group_id" - t.boolean "own_equipment" - t.boolean "bgm" - t.boolean "camera_permission" - t.boolean "loud_sound" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - create_table "stage_numbers", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.integer "stage_id" - t.integer "group_identification_id" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - create_table "stage_orders", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.integer "group_id" - t.boolean "is_sunny" - t.integer "fes_date_id" - t.integer "stage_first" - t.integer "stage_second" - t.string "use_time_interval" - t.string "prepare_time_interval" - t.string "cleanup_time_interval" - t.string "prepare_start_time" - t.string "performance_start_time" - t.string "performance_end_time" - t.string "cleanup_end_time" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - create_table "stages", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.string "name" - t.boolean "enable_sunny" - t.boolean "enable_rainy" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - create_table "stocker_items", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.integer "rental_item_id" - t.integer "stocker_place_id" - t.integer "fes_year_id" - t.integer "num" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - create_table "stocker_places", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.string "name" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - t.integer "stock_item_status" - t.integer "assign_item_status" - end - - create_table "stool_tests", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.string "status" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - create_table "sub_reps", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.integer "group_id" - t.string "name" - t.integer "department_id" - t.integer "grade_id" - t.string "tel" - t.string "email" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - t.integer "student_id" - end - - create_table "user_details", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.string "tel" - t.integer "grade_id" - t.integer "department_id" - t.bigint "user_id", null: false - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - t.integer "student_id" - t.index ["user_id"], name: "index_user_details_on_user_id" - end - - create_table "user_page_settings", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.boolean "is_regist_group" - t.boolean "is_regist_food_product" - t.boolean "is_edit_group" - t.boolean "is_edit_sub_rep" - t.boolean "is_edit_place" - t.boolean "is_edit_power_order" - t.boolean "is_edit_rental_order" - t.boolean "is_edit_stage_order" - t.boolean "is_edit_employee" - t.boolean "is_edit_food_product" - t.boolean "is_edit_purchase_list" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - t.boolean "add_power_order" - t.boolean "add_rental_order" - t.boolean "add_employee" - t.boolean "add_food_product" - t.boolean "add_purchase_list" - t.integer "fes_year_id" - t.boolean "is_edit_announcement" - t.boolean "add_announcement" - t.boolean "is_edit_user" - t.boolean "is_edit_stage_common_option" - t.boolean "is_edit_public_relation" - t.boolean "is_edit_venue_map" - t.boolean "is_edit_cooking_process" - t.boolean "add_stage_order" - end - - create_table "users", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.string "provider", default: "email", null: false - t.string "uid", default: "", null: false - t.string "encrypted_password", default: "", null: false - t.string "reset_password_token" - t.datetime "reset_password_sent_at" - t.boolean "allow_password_change", default: false - t.datetime "remember_created_at" - t.integer "sign_in_count", default: 0, null: false - t.datetime "current_sign_in_at" - t.datetime "last_sign_in_at" - t.string "current_sign_in_ip" - t.string "last_sign_in_ip" - t.string "confirmation_token" - t.datetime "confirmed_at" - t.datetime "confirmation_sent_at" - t.string "unconfirmed_email" - t.string "name" - t.string "email" - t.integer "role_id" - t.text "tokens" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - t.index ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true - t.index ["email"], name: "index_users_on_email", unique: true - t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true - t.index ["uid", "provider"], name: "index_users_on_uid_and_provider", unique: true - end - - create_table "venue_maps", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| - t.integer "group_id" - t.string "picture_name" - t.string "picture_path" - t.datetime "created_at", precision: 6, null: false - t.datetime "updated_at", precision: 6, null: false - end - - add_foreign_key "cooking_process_orders", "groups" - add_foreign_key "user_details", "users" + + create_table 'assign_rental_items', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.integer 'group_id' + t.integer 'rental_item_id' + t.integer 'num' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + t.integer 'stocker_place_id' + end + + create_table 'assign_stages', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.integer 'stage_order_id' + t.integer 'stage_id' + t.string 'time_point_start' + t.string 'time_point_end' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + end + + create_table 'contact_people', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.integer 'group_id' + t.string 'name' + t.string 'email' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + end + + create_table 'cooking_process_orders', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.bigint 'group_id', null: false + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + t.boolean 'pre_open_kitchen', default: false, null: false + t.boolean 'during_open_kitchen', default: false, null: false + t.text 'tent' + t.index ['group_id'], name: 'index_cooking_process_orders_on_group_id' + end + + create_table 'current_stocks', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.integer 'place_category_id' + t.integer 'place_id' + t.integer 'item_id' + t.integer 'stock_num' + t.integer 'date_id' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + end + + create_table 'departments', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.string 'name' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + end + + create_table 'employees', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.integer 'group_id' + t.string 'name' + t.integer 'student_id' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + t.integer 'stool_test_id' + end + + create_table 'fes_dates', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.integer 'days_num' + t.string 'date' + t.string 'day' + t.integer 'fes_year_id' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + end + + create_table 'fes_years', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.integer 'year_num' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + end + + create_table 'food_products', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.integer 'group_id' + t.string 'name' + t.boolean 'is_cooking' + t.integer 'first_day_num' + t.integer 'second_day_num' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + end + + create_table 'grades', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.string 'name' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + end + + create_table 'group_categories', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.string 'name' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + end + + create_table 'group_identifications', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.integer 'group_id' + t.integer 'number' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + end + + create_table 'groups', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.string 'name' + t.string 'project_name' + t.text 'activity' + t.integer 'user_id' + t.integer 'group_category_id' + t.integer 'fes_year_id' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + t.boolean 'committee' + t.boolean 'is_international' + t.boolean 'is_external' + end + + create_table 'item_adjustments', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.integer 'group_id' + t.integer 'use_place_id' + t.integer 'rental_place_id' + t.integer 'item_id' + t.integer 'item_num' + t.integer 'people_num' + t.datetime 'time_start' + t.datetime 'time_end' + t.integer 'date_id' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + end + + create_table 'memos', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.text 'content' + t.integer 'user_id' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + end + + create_table 'news', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.string 'title' + t.text 'body' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + end + + create_table 'place_allow_lists', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.integer 'place_id' + t.integer 'group_category_id' + t.boolean 'enable' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + end + + create_table 'place_numbers', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.integer 'place_id' + t.integer 'group_identification_id' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + end + + create_table 'place_orders', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.integer 'group_id' + t.integer 'first' + t.integer 'second' + t.integer 'third' + t.text 'remark' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + end + + create_table 'places', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.string 'name' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + end + + create_table 'power_orders', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.integer 'group_id' + t.string 'item' + t.integer 'power' + t.string 'manufacturer' + t.string 'model' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + t.string 'item_url' + end + + create_table 'public_relations', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.integer 'group_id' + t.string 'picture_name' + t.string 'picture_path' + t.text 'blurb' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + end + + create_table 'purchase_lists', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.integer 'food_product_id' + t.integer 'shop_id' + t.integer 'fes_date_id' + t.string 'items' + t.boolean 'is_fresh' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + t.string 'purchase_date' + t.string 'url' + end + + create_table 'rentable_items', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.integer 'stocker_item_id' + t.integer 'stocker_place_id' + t.integer 'max_num' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + end + + create_table 'rental_item_allow_lists', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.integer 'rental_item_id' + t.integer 'group_category_id' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + end + + create_table 'rental_items', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.string 'name' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + t.boolean 'is_stage_rentable' + t.boolean 'is_inside_shop_rentable' + t.boolean 'is_outside_shop_rentable' + end + + create_table 'rental_orders', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.integer 'group_id' + t.integer 'rental_item_id' + t.integer 'num' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + end + + create_table 'roles', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.string 'name' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + end + + create_table 'shops', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.string 'name' + t.string 'tel' + t.string 'opening_hours' + t.string 'address' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + end + + create_table 'stage_common_options', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.integer 'group_id' + t.boolean 'own_equipment' + t.boolean 'bgm' + t.boolean 'camera_permission' + t.boolean 'loud_sound' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + end + + create_table 'stage_numbers', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.integer 'stage_id' + t.integer 'group_identification_id' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + end + + create_table 'stage_orders', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.integer 'group_id' + t.boolean 'is_sunny' + t.integer 'fes_date_id' + t.integer 'stage_first' + t.integer 'stage_second' + t.string 'use_time_interval' + t.string 'prepare_time_interval' + t.string 'cleanup_time_interval' + t.string 'prepare_start_time' + t.string 'performance_start_time' + t.string 'performance_end_time' + t.string 'cleanup_end_time' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + end + + create_table 'stages', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.string 'name' + t.boolean 'enable_sunny' + t.boolean 'enable_rainy' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + end + + create_table 'stocker_items', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.integer 'rental_item_id' + t.integer 'stocker_place_id' + t.integer 'fes_year_id' + t.integer 'num' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + end + + create_table 'stocker_places', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.string 'name' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + t.integer 'stock_item_status' + t.integer 'assign_item_status' + end + + create_table 'stool_tests', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.string 'status' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + end + + create_table 'sub_reps', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.integer 'group_id' + t.string 'name' + t.integer 'department_id' + t.integer 'grade_id' + t.string 'tel' + t.string 'email' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + t.integer 'student_id' + end + + create_table 'user_details', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.string 'tel' + t.integer 'grade_id' + t.integer 'department_id' + t.bigint 'user_id', null: false + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + t.integer 'student_id' + t.index ['user_id'], name: 'index_user_details_on_user_id' + end + + create_table 'user_page_settings', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.boolean 'is_regist_group' + t.boolean 'is_regist_food_product' + t.boolean 'is_edit_group' + t.boolean 'is_edit_sub_rep' + t.boolean 'is_edit_place' + t.boolean 'is_edit_power_order' + t.boolean 'is_edit_rental_order' + t.boolean 'is_edit_stage_order' + t.boolean 'is_edit_employee' + t.boolean 'is_edit_food_product' + t.boolean 'is_edit_purchase_list' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + t.boolean 'add_power_order' + t.boolean 'add_rental_order' + t.boolean 'add_employee' + t.boolean 'add_food_product' + t.boolean 'add_purchase_list' + t.integer 'fes_year_id' + t.boolean 'is_edit_announcement' + t.boolean 'add_announcement' + t.boolean 'is_edit_user' + t.boolean 'is_edit_stage_common_option' + t.boolean 'is_edit_public_relation' + t.boolean 'is_edit_venue_map' + t.boolean 'is_edit_cooking_process' + t.boolean 'add_stage_order' + end + + create_table 'users', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.string 'provider', default: 'email', null: false + t.string 'uid', default: '', null: false + t.string 'encrypted_password', default: '', null: false + t.string 'reset_password_token' + t.datetime 'reset_password_sent_at' + t.boolean 'allow_password_change', default: false + t.datetime 'remember_created_at' + t.integer 'sign_in_count', default: 0, null: false + t.datetime 'current_sign_in_at' + t.datetime 'last_sign_in_at' + t.string 'current_sign_in_ip' + t.string 'last_sign_in_ip' + t.string 'confirmation_token' + t.datetime 'confirmed_at' + t.datetime 'confirmation_sent_at' + t.string 'unconfirmed_email' + t.string 'name' + t.string 'email' + t.integer 'role_id' + t.text 'tokens' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + t.index ['confirmation_token'], name: 'index_users_on_confirmation_token', unique: true + t.index ['email'], name: 'index_users_on_email', unique: true + t.index ['reset_password_token'], name: 'index_users_on_reset_password_token', unique: true + t.index %w[uid provider], name: 'index_users_on_uid_and_provider', unique: true + end + + create_table 'venue_maps', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| + t.integer 'group_id' + t.string 'picture_name' + t.string 'picture_path' + t.datetime 'created_at', precision: 6, null: false + t.datetime 'updated_at', precision: 6, null: false + end + + add_foreign_key 'cooking_process_orders', 'groups' + add_foreign_key 'user_details', 'users' end diff --git a/api/db/user.rb b/api/db/user.rb index 771943744..552d13d7a 100644 --- a/api/db/user.rb +++ b/api/db/user.rb @@ -1,38 +1,73 @@ -User.seed( :id, - { id: 1, name: '秋本真夏', email: 'akimoto@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 2, name: '生田絵梨華', email: 'ikuta@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 2}, - { id: 3, name: '岩本蓮華', email: 'iwamoto@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 3}, - { id: 4, name: '梅沢実波', email: 'umezawa@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 5, name: '大園桃湖', email: 'ozono@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 6, name: '北野陽奈子', email: 'kitano@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 7, name: '久保史緒理', email: 'kubo@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 8, name: '斉藤飛鳥', email: 'saito@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 9, name: '白石麻依', email: 'shiraishi@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 10, name: '新内眞依', email: 'shinuchi@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 11, name: '高山一美', email: 'takayama@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 12, name: '中田華奈', email: 'nakada@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 13, name: '樋口日菜', email: 'higuchi@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 14, name: '星乃みなみ', email: 'hoshino@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 15, name: '堀美央奈', email: 'hori@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 16, name: '松村沙友梨', email: 'matsumura@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 17, name: '山下実月', email: 'yamashita@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 18, name: '与田優希', email: 'yoda@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 19, name: '輪田まあや', email: 'wada@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 20, name: '園藤さくら', email: 'endo@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 21, name: '嘉喜遥華', email: 'kaki@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 22, name: '菅田将輝', email: 'suda@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 23, name: '三蒲翔平', email: 'miura@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 24, name: '小栗駿', email: 'oguri@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 25, name: '松阪桃李', email: 'matsuzaka@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 26, name: '綾野豪', email: 'ayano@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 27, name: '福士蒼太', email: 'fukushi@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 28, name: '竹内涼馬', email: 'takeuchi@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 29, name: '神木龍之介', email: 'kamiki@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 30, name: '堺雅斗', email: 'sakai@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 31, name: '瀬戸耕史', email: 'seto@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 32, name: '大野聡', email: 'ono@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 33, name: '櫻井将', email: 'sakurai@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 34, name: '相葉雅貴', email: 'aiba@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 35, name: '二宮一也', email: 'ninomiya@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, - { id: 36, name: '松元潤', email: 'matsumoto@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1}, -) +User.seed(:id, + { id: 1, name: '秋本真夏', email: 'akimoto@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 2, name: '生田絵梨華', email: 'ikuta@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 2 }, + { id: 3, name: '岩本蓮華', email: 'iwamoto@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 3 }, + { id: 4, name: '梅沢実波', email: 'umezawa@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 5, name: '大園桃湖', email: 'ozono@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 6, name: '北野陽奈子', email: 'kitano@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 7, name: '久保史緒理', email: 'kubo@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 8, name: '斉藤飛鳥', email: 'saito@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 9, name: '白石麻依', email: 'shiraishi@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 10, name: '新内眞依', email: 'shinuchi@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 11, name: '高山一美', email: 'takayama@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 12, name: '中田華奈', email: 'nakada@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 13, name: '樋口日菜', email: 'higuchi@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 14, name: '星乃みなみ', email: 'hoshino@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 15, name: '堀美央奈', email: 'hori@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 16, name: '松村沙友梨', email: 'matsumura@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 17, name: '山下実月', email: 'yamashita@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 18, name: '与田優希', email: 'yoda@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 19, name: '輪田まあや', email: 'wada@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 20, name: '園藤さくら', email: 'endo@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 21, name: '嘉喜遥華', email: 'kaki@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 22, name: '菅田将輝', email: 'suda@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 23, name: '三蒲翔平', email: 'miura@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 24, name: '小栗駿', email: 'oguri@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 25, name: '松阪桃李', email: 'matsuzaka@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 26, name: '綾野豪', email: 'ayano@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 27, name: '福士蒼太', email: 'fukushi@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 28, name: '竹内涼馬', email: 'takeuchi@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 29, name: '神木龍之介', email: 'kamiki@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 30, name: '堺雅斗', email: 'sakai@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 31, name: '瀬戸耕史', email: 'seto@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 32, name: '大野聡', email: 'ono@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 33, name: '櫻井将', email: 'sakurai@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 34, name: '相葉雅貴', email: 'aiba@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 35, name: '二宮一也', email: 'ninomiya@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }, + { id: 36, name: '松元潤', email: 'matsumoto@hangout.com', password: 'hangout', password_confirmation: 'hangout', + role_id: 1 }) diff --git a/api/test/channels/application_cable/connection_test.rb b/api/test/channels/application_cable/connection_test.rb index 800405f15..d05dbd24c 100644 --- a/api/test/channels/application_cable/connection_test.rb +++ b/api/test/channels/application_cable/connection_test.rb @@ -1,4 +1,4 @@ -require "test_helper" +require 'test_helper' class ApplicationCable::ConnectionTest < ActionCable::Connection::TestCase # test "connects with cookies" do diff --git a/api/test/controllers/announcements_controller_test.rb b/api/test/controllers/announcements_controller_test.rb index a07091fe6..175d708a0 100644 --- a/api/test/controllers/announcements_controller_test.rb +++ b/api/test/controllers/announcements_controller_test.rb @@ -1,4 +1,4 @@ -require "test_helper" +require 'test_helper' class AnnouncementsControllerTest < ActionDispatch::IntegrationTest # test "the truth" do diff --git a/api/test/controllers/assign_group_places_controller_test.rb b/api/test/controllers/assign_group_places_controller_test.rb index 821f41e5d..0655dd079 100644 --- a/api/test/controllers/assign_group_places_controller_test.rb +++ b/api/test/controllers/assign_group_places_controller_test.rb @@ -5,30 +5,32 @@ class AssignGroupPlacesControllerTest < ActionDispatch::IntegrationTest @assign_group_place = assign_group_places(:one) end - test "should get index" do + test 'should get index' do get assign_group_places_url, as: :json assert_response :success end - test "should create assign_group_place" do + test 'should create assign_group_place' do assert_difference('AssignGroupPlace.count') do - post assign_group_places_url, params: { assign_group_place: { place_id: @assign_group_place.place_id, place_order_id: @assign_group_place.place_order_id } }, as: :json + post assign_group_places_url, + params: { assign_group_place: { place_id: @assign_group_place.place_id, place_order_id: @assign_group_place.place_order_id } }, as: :json end assert_response 201 end - test "should show assign_group_place" do + test 'should show assign_group_place' do get assign_group_place_url(@assign_group_place), as: :json assert_response :success end - test "should update assign_group_place" do - patch assign_group_place_url(@assign_group_place), params: { assign_group_place: { place_id: @assign_group_place.place_id, place_order_id: @assign_group_place.place_order_id } }, as: :json + test 'should update assign_group_place' do + patch assign_group_place_url(@assign_group_place), + params: { assign_group_place: { place_id: @assign_group_place.place_id, place_order_id: @assign_group_place.place_order_id } }, as: :json assert_response 200 end - test "should destroy assign_group_place" do + test 'should destroy assign_group_place' do assert_difference('AssignGroupPlace.count', -1) do delete assign_group_place_url(@assign_group_place), as: :json end diff --git a/api/test/controllers/assign_rental_items_controller_test.rb b/api/test/controllers/assign_rental_items_controller_test.rb index 0920a6f6a..7940f5447 100644 --- a/api/test/controllers/assign_rental_items_controller_test.rb +++ b/api/test/controllers/assign_rental_items_controller_test.rb @@ -5,30 +5,32 @@ class AssignRentalItemsControllerTest < ActionDispatch::IntegrationTest @assign_rental_item = assign_rental_items(:one) end - test "should get index" do + test 'should get index' do get assign_rental_items_url, as: :json assert_response :success end - test "should create assign_rental_item" do + test 'should create assign_rental_item' do assert_difference('AssignRentalItem.count') do - post assign_rental_items_url, params: { assign_rental_item: { num: @assign_rental_item.num, rentable_item_id: @assign_rental_item.rentable_item_id, rental_order_id: @assign_rental_item.rental_order_id } }, as: :json + post assign_rental_items_url, + params: { assign_rental_item: { num: @assign_rental_item.num, rentable_item_id: @assign_rental_item.rentable_item_id, rental_order_id: @assign_rental_item.rental_order_id } }, as: :json end assert_response 201 end - test "should show assign_rental_item" do + test 'should show assign_rental_item' do get assign_rental_item_url(@assign_rental_item), as: :json assert_response :success end - test "should update assign_rental_item" do - patch assign_rental_item_url(@assign_rental_item), params: { assign_rental_item: { num: @assign_rental_item.num, rentable_item_id: @assign_rental_item.rentable_item_id, rental_order_id: @assign_rental_item.rental_order_id } }, as: :json + test 'should update assign_rental_item' do + patch assign_rental_item_url(@assign_rental_item), + params: { assign_rental_item: { num: @assign_rental_item.num, rentable_item_id: @assign_rental_item.rentable_item_id, rental_order_id: @assign_rental_item.rental_order_id } }, as: :json assert_response 200 end - test "should destroy assign_rental_item" do + test 'should destroy assign_rental_item' do assert_difference('AssignRentalItem.count', -1) do delete assign_rental_item_url(@assign_rental_item), as: :json end diff --git a/api/test/controllers/assign_stages_controller_test.rb b/api/test/controllers/assign_stages_controller_test.rb index 8356863fa..1e12ab6a1 100644 --- a/api/test/controllers/assign_stages_controller_test.rb +++ b/api/test/controllers/assign_stages_controller_test.rb @@ -5,30 +5,32 @@ class AssignStagesControllerTest < ActionDispatch::IntegrationTest @assign_stage = assign_stages(:one) end - test "should get index" do + test 'should get index' do get assign_stages_url, as: :json assert_response :success end - test "should create assign_stage" do + test 'should create assign_stage' do assert_difference('AssignStage.count') do - post assign_stages_url, params: { assign_stage: { stage_id: @assign_stage.stage_id, stage_order_id: @assign_stage.stage_order_id, time_point_end: @assign_stage.time_point_end, time_point_start: @assign_stage.time_point_start } }, as: :json + post assign_stages_url, + params: { assign_stage: { stage_id: @assign_stage.stage_id, stage_order_id: @assign_stage.stage_order_id, time_point_end: @assign_stage.time_point_end, time_point_start: @assign_stage.time_point_start } }, as: :json end assert_response 201 end - test "should show assign_stage" do + test 'should show assign_stage' do get assign_stage_url(@assign_stage), as: :json assert_response :success end - test "should update assign_stage" do - patch assign_stage_url(@assign_stage), params: { assign_stage: { stage_id: @assign_stage.stage_id, stage_order_id: @assign_stage.stage_order_id, time_point_end: @assign_stage.time_point_end, time_point_start: @assign_stage.time_point_start } }, as: :json + test 'should update assign_stage' do + patch assign_stage_url(@assign_stage), + params: { assign_stage: { stage_id: @assign_stage.stage_id, stage_order_id: @assign_stage.stage_order_id, time_point_end: @assign_stage.time_point_end, time_point_start: @assign_stage.time_point_start } }, as: :json assert_response 200 end - test "should destroy assign_stage" do + test 'should destroy assign_stage' do assert_difference('AssignStage.count', -1) do delete assign_stage_url(@assign_stage), as: :json end diff --git a/api/test/controllers/cooking_process_orders_controller_test.rb b/api/test/controllers/cooking_process_orders_controller_test.rb index f1d1eb4ff..fc5401048 100644 --- a/api/test/controllers/cooking_process_orders_controller_test.rb +++ b/api/test/controllers/cooking_process_orders_controller_test.rb @@ -1,4 +1,4 @@ -require "test_helper" +require 'test_helper' class CookingProcessOrdersControllerTest < ActionDispatch::IntegrationTest # test "the truth" do diff --git a/api/test/controllers/current_stocks_controller_test.rb b/api/test/controllers/current_stocks_controller_test.rb index bc442cf27..559be2a72 100644 --- a/api/test/controllers/current_stocks_controller_test.rb +++ b/api/test/controllers/current_stocks_controller_test.rb @@ -1,22 +1,22 @@ -require "test_helper" +require 'test_helper' class CurrentStocksControllerTest < ActionDispatch::IntegrationTest - test "should get index" do + test 'should get index' do get current_stocks_index_url assert_response :success end - test "should get show" do + test 'should get show' do get current_stocks_show_url assert_response :success end - test "should get new" do + test 'should get new' do get current_stocks_new_url assert_response :success end - test "should get edit" do + test 'should get edit' do get current_stocks_edit_url assert_response :success end diff --git a/api/test/controllers/employees_controller_test.rb b/api/test/controllers/employees_controller_test.rb index a11a29547..b990ae319 100644 --- a/api/test/controllers/employees_controller_test.rb +++ b/api/test/controllers/employees_controller_test.rb @@ -5,30 +5,32 @@ class EmployeesControllerTest < ActionDispatch::IntegrationTest @employee = employees(:one) end - test "should get index" do + test 'should get index' do get employees_url, as: :json assert_response :success end - test "should create employee" do + test 'should create employee' do assert_difference('Employee.count') do - post employees_url, params: { employee: { employee_category_id: @employee.employee_category_id, group_id: @employee.group_id, name: @employee.name, student_id: @employee.student_id } }, as: :json + post employees_url, + params: { employee: { employee_category_id: @employee.employee_category_id, group_id: @employee.group_id, name: @employee.name, student_id: @employee.student_id } }, as: :json end assert_response 201 end - test "should show employee" do + test 'should show employee' do get employee_url(@employee), as: :json assert_response :success end - test "should update employee" do - patch employee_url(@employee), params: { employee: { employee_category_id: @employee.employee_category_id, group_id: @employee.group_id, name: @employee.name, student_id: @employee.student_id } }, as: :json + test 'should update employee' do + patch employee_url(@employee), + params: { employee: { employee_category_id: @employee.employee_category_id, group_id: @employee.group_id, name: @employee.name, student_id: @employee.student_id } }, as: :json assert_response 200 end - test "should destroy employee" do + test 'should destroy employee' do assert_difference('Employee.count', -1) do delete employee_url(@employee), as: :json end diff --git a/api/test/controllers/food_products_controller_test.rb b/api/test/controllers/food_products_controller_test.rb index c4276eb1a..9ae2b991c 100644 --- a/api/test/controllers/food_products_controller_test.rb +++ b/api/test/controllers/food_products_controller_test.rb @@ -5,30 +5,32 @@ class FoodProductsControllerTest < ActionDispatch::IntegrationTest @food_product = food_products(:one) end - test "should get index" do + test 'should get index' do get food_products_url, as: :json assert_response :success end - test "should create food_product" do + test 'should create food_product' do assert_difference('FoodProduct.count') do - post food_products_url, params: { food_product: { first_day_num: @food_product.first_day_num, group_id: @food_product.group_id, is_cooking: @food_product.is_cooking, name: @food_product.name, second_day_num: @food_product.second_day_num } }, as: :json + post food_products_url, + params: { food_product: { first_day_num: @food_product.first_day_num, group_id: @food_product.group_id, is_cooking: @food_product.is_cooking, name: @food_product.name, second_day_num: @food_product.second_day_num } }, as: :json end assert_response 201 end - test "should show food_product" do + test 'should show food_product' do get food_product_url(@food_product), as: :json assert_response :success end - test "should update food_product" do - patch food_product_url(@food_product), params: { food_product: { first_day_num: @food_product.first_day_num, group_id: @food_product.group_id, is_cooking: @food_product.is_cooking, name: @food_product.name, second_day_num: @food_product.second_day_num } }, as: :json + test 'should update food_product' do + patch food_product_url(@food_product), + params: { food_product: { first_day_num: @food_product.first_day_num, group_id: @food_product.group_id, is_cooking: @food_product.is_cooking, name: @food_product.name, second_day_num: @food_product.second_day_num } }, as: :json assert_response 200 end - test "should destroy food_product" do + test 'should destroy food_product' do assert_difference('FoodProduct.count', -1) do delete food_product_url(@food_product), as: :json end diff --git a/api/test/controllers/group_identification_controller_test.rb b/api/test/controllers/group_identification_controller_test.rb index 9401d010a..fad30325f 100644 --- a/api/test/controllers/group_identification_controller_test.rb +++ b/api/test/controllers/group_identification_controller_test.rb @@ -1,17 +1,17 @@ -require "test_helper" +require 'test_helper' class GroupIdentificationControllerTest < ActionDispatch::IntegrationTest - test "should get create" do + test 'should get create' do get group_identification_create_url assert_response :success end - test "should get update" do + test 'should get update' do get group_identification_update_url assert_response :success end - test "should get destroy" do + test 'should get destroy' do get group_identification_destroy_url assert_response :success end diff --git a/api/test/controllers/groups_controller_test.rb b/api/test/controllers/groups_controller_test.rb index 64dce44a6..3d2ca5e66 100644 --- a/api/test/controllers/groups_controller_test.rb +++ b/api/test/controllers/groups_controller_test.rb @@ -5,30 +5,32 @@ class GroupsControllerTest < ActionDispatch::IntegrationTest @group = groups(:one) end - test "should get index" do + test 'should get index' do get groups_url, as: :json assert_response :success end - test "should create group" do + test 'should create group' do assert_difference('Group.count') do - post groups_url, params: { group: { activity: @group.activity, fes_year_id: @group.fes_year_id, group_category_id: @group.group_category_id, name: @group.name, project_name: @group.project_name, user_id: @group.user_id } }, as: :json + post groups_url, + params: { group: { activity: @group.activity, fes_year_id: @group.fes_year_id, group_category_id: @group.group_category_id, name: @group.name, project_name: @group.project_name, user_id: @group.user_id } }, as: :json end assert_response 201 end - test "should show group" do + test 'should show group' do get group_url(@group), as: :json assert_response :success end - test "should update group" do - patch group_url(@group), params: { group: { activity: @group.activity, fes_year_id: @group.fes_year_id, group_category_id: @group.group_category_id, name: @group.name, project_name: @group.project_name, user_id: @group.user_id } }, as: :json + test 'should update group' do + patch group_url(@group), + params: { group: { activity: @group.activity, fes_year_id: @group.fes_year_id, group_category_id: @group.group_category_id, name: @group.name, project_name: @group.project_name, user_id: @group.user_id } }, as: :json assert_response 200 end - test "should destroy group" do + test 'should destroy group' do assert_difference('Group.count', -1) do delete group_url(@group), as: :json end diff --git a/api/test/controllers/memos_controller_test.rb b/api/test/controllers/memos_controller_test.rb index 22274047a..d8cb7eaee 100644 --- a/api/test/controllers/memos_controller_test.rb +++ b/api/test/controllers/memos_controller_test.rb @@ -5,12 +5,12 @@ class MemosControllerTest < ActionDispatch::IntegrationTest @memo = memos(:one) end - test "should get index" do + test 'should get index' do get memos_url, as: :json assert_response :success end - test "should create memo" do + test 'should create memo' do assert_difference('Memo.count') do post memos_url, params: { memo: { content: @memo.content, user_id: @memo.user_id } }, as: :json end @@ -18,17 +18,17 @@ class MemosControllerTest < ActionDispatch::IntegrationTest assert_response 201 end - test "should show memo" do + test 'should show memo' do get memo_url(@memo), as: :json assert_response :success end - test "should update memo" do + test 'should update memo' do patch memo_url(@memo), params: { memo: { content: @memo.content, user_id: @memo.user_id } }, as: :json assert_response 200 end - test "should destroy memo" do + test 'should destroy memo' do assert_difference('Memo.count', -1) do delete memo_url(@memo), as: :json end diff --git a/api/test/controllers/news_controller_test.rb b/api/test/controllers/news_controller_test.rb index 5ff31f3f6..70fe45274 100644 --- a/api/test/controllers/news_controller_test.rb +++ b/api/test/controllers/news_controller_test.rb @@ -5,12 +5,12 @@ class NewsControllerTest < ActionDispatch::IntegrationTest @news = news(:one) end - test "should get index" do + test 'should get index' do get news_index_url, as: :json assert_response :success end - test "should create news" do + test 'should create news' do assert_difference('News.count') do post news_index_url, params: { news: { body: @news.body, title: @news.title } }, as: :json end @@ -18,17 +18,17 @@ class NewsControllerTest < ActionDispatch::IntegrationTest assert_response 201 end - test "should show news" do + test 'should show news' do get news_url(@news), as: :json assert_response :success end - test "should update news" do + test 'should update news' do patch news_url(@news), params: { news: { body: @news.body, title: @news.title } }, as: :json assert_response 200 end - test "should destroy news" do + test 'should destroy news' do assert_difference('News.count', -1) do delete news_url(@news), as: :json end diff --git a/api/test/controllers/place_allow_lists_controller_test.rb b/api/test/controllers/place_allow_lists_controller_test.rb index 1c44154fd..04f56ed2c 100644 --- a/api/test/controllers/place_allow_lists_controller_test.rb +++ b/api/test/controllers/place_allow_lists_controller_test.rb @@ -5,30 +5,32 @@ class PlaceAllowListsControllerTest < ActionDispatch::IntegrationTest @place_allow_list = place_allow_lists(:one) end - test "should get index" do + test 'should get index' do get place_allow_lists_url, as: :json assert_response :success end - test "should create place_allow_list" do + test 'should create place_allow_list' do assert_difference('PlaceAllowList.count') do - post place_allow_lists_url, params: { place_allow_list: { enable: @place_allow_list.enable, group_category_id: @place_allow_list.group_category_id, place_id: @place_allow_list.place_id } }, as: :json + post place_allow_lists_url, + params: { place_allow_list: { enable: @place_allow_list.enable, group_category_id: @place_allow_list.group_category_id, place_id: @place_allow_list.place_id } }, as: :json end assert_response 201 end - test "should show place_allow_list" do + test 'should show place_allow_list' do get place_allow_list_url(@place_allow_list), as: :json assert_response :success end - test "should update place_allow_list" do - patch place_allow_list_url(@place_allow_list), params: { place_allow_list: { enable: @place_allow_list.enable, group_category_id: @place_allow_list.group_category_id, place_id: @place_allow_list.place_id } }, as: :json + test 'should update place_allow_list' do + patch place_allow_list_url(@place_allow_list), + params: { place_allow_list: { enable: @place_allow_list.enable, group_category_id: @place_allow_list.group_category_id, place_id: @place_allow_list.place_id } }, as: :json assert_response 200 end - test "should destroy place_allow_list" do + test 'should destroy place_allow_list' do assert_difference('PlaceAllowList.count', -1) do delete place_allow_list_url(@place_allow_list), as: :json end diff --git a/api/test/controllers/place_number_controller_test.rb b/api/test/controllers/place_number_controller_test.rb index 207353ba9..27edd853a 100644 --- a/api/test/controllers/place_number_controller_test.rb +++ b/api/test/controllers/place_number_controller_test.rb @@ -1,27 +1,27 @@ -require "test_helper" +require 'test_helper' class PlaceNumberControllerTest < ActionDispatch::IntegrationTest - test "should get index" do + test 'should get index' do get place_number_index_url assert_response :success end - test "should get show" do + test 'should get show' do get place_number_show_url assert_response :success end - test "should get create" do + test 'should get create' do get place_number_create_url assert_response :success end - test "should get update" do + test 'should get update' do get place_number_update_url assert_response :success end - test "should get destroy" do + test 'should get destroy' do get place_number_destroy_url assert_response :success end diff --git a/api/test/controllers/place_orders_controller_test.rb b/api/test/controllers/place_orders_controller_test.rb index 9ae18c77e..59c7b2bca 100644 --- a/api/test/controllers/place_orders_controller_test.rb +++ b/api/test/controllers/place_orders_controller_test.rb @@ -5,30 +5,32 @@ class PlaceOrdersControllerTest < ActionDispatch::IntegrationTest @place_order = place_orders(:one) end - test "should get index" do + test 'should get index' do get place_orders_url, as: :json assert_response :success end - test "should create place_order" do + test 'should create place_order' do assert_difference('PlaceOrder.count') do - post place_orders_url, params: { place_order: { first: @place_order.first, group_id: @place_order.group_id, remark: @place_order.remark, second: @place_order.second, third: @place_order.third } }, as: :json + post place_orders_url, + params: { place_order: { first: @place_order.first, group_id: @place_order.group_id, remark: @place_order.remark, second: @place_order.second, third: @place_order.third } }, as: :json end assert_response 201 end - test "should show place_order" do + test 'should show place_order' do get place_order_url(@place_order), as: :json assert_response :success end - test "should update place_order" do - patch place_order_url(@place_order), params: { place_order: { first: @place_order.first, group_id: @place_order.group_id, remark: @place_order.remark, second: @place_order.second, third: @place_order.third } }, as: :json + test 'should update place_order' do + patch place_order_url(@place_order), + params: { place_order: { first: @place_order.first, group_id: @place_order.group_id, remark: @place_order.remark, second: @place_order.second, third: @place_order.third } }, as: :json assert_response 200 end - test "should destroy place_order" do + test 'should destroy place_order' do assert_difference('PlaceOrder.count', -1) do delete place_order_url(@place_order), as: :json end diff --git a/api/test/controllers/power_orders_controller_test.rb b/api/test/controllers/power_orders_controller_test.rb index 4ac22aa12..66fc74966 100644 --- a/api/test/controllers/power_orders_controller_test.rb +++ b/api/test/controllers/power_orders_controller_test.rb @@ -5,30 +5,32 @@ class PowerOrdersControllerTest < ActionDispatch::IntegrationTest @power_order = power_orders(:one) end - test "should get index" do + test 'should get index' do get power_orders_url, as: :json assert_response :success end - test "should create power_order" do + test 'should create power_order' do assert_difference('PowerOrder.count') do - post power_orders_url, params: { power_order: { group_id: @power_order.group_id, item: @power_order.item, manufacture: @power_order.manufacture, model: @power_order.model, power: @power_order.power } }, as: :json + post power_orders_url, + params: { power_order: { group_id: @power_order.group_id, item: @power_order.item, manufacture: @power_order.manufacture, model: @power_order.model, power: @power_order.power } }, as: :json end assert_response 201 end - test "should show power_order" do + test 'should show power_order' do get power_order_url(@power_order), as: :json assert_response :success end - test "should update power_order" do - patch power_order_url(@power_order), params: { power_order: { group_id: @power_order.group_id, item: @power_order.item, manufacture: @power_order.manufacture, model: @power_order.model, power: @power_order.power } }, as: :json + test 'should update power_order' do + patch power_order_url(@power_order), + params: { power_order: { group_id: @power_order.group_id, item: @power_order.item, manufacture: @power_order.manufacture, model: @power_order.model, power: @power_order.power } }, as: :json assert_response 200 end - test "should destroy power_order" do + test 'should destroy power_order' do assert_difference('PowerOrder.count', -1) do delete power_order_url(@power_order), as: :json end diff --git a/api/test/controllers/public_relations_controller_test.rb b/api/test/controllers/public_relations_controller_test.rb index 1a0d0bf6b..83717ce65 100644 --- a/api/test/controllers/public_relations_controller_test.rb +++ b/api/test/controllers/public_relations_controller_test.rb @@ -1,34 +1,36 @@ -require "test_helper" +require 'test_helper' class PublicRelationsControllerTest < ActionDispatch::IntegrationTest setup do @public_relation = public_relations(:one) end - test "should get index" do + test 'should get index' do get public_relations_url, as: :json assert_response :success end - test "should create public_relation" do + test 'should create public_relation' do assert_difference('PublicRelation.count') do - post public_relations_url, params: { public_relation: { blurb: @public_relation.blurb, group_id: @public_relation.group_id, picture_path: @public_relation.picture_path } }, as: :json + post public_relations_url, + params: { public_relation: { blurb: @public_relation.blurb, group_id: @public_relation.group_id, picture_path: @public_relation.picture_path } }, as: :json end assert_response 201 end - test "should show public_relation" do + test 'should show public_relation' do get public_relation_url(@public_relation), as: :json assert_response :success end - test "should update public_relation" do - patch public_relation_url(@public_relation), params: { public_relation: { blurb: @public_relation.blurb, group_id: @public_relation.group_id, picture_path: @public_relation.picture_path } }, as: :json + test 'should update public_relation' do + patch public_relation_url(@public_relation), + params: { public_relation: { blurb: @public_relation.blurb, group_id: @public_relation.group_id, picture_path: @public_relation.picture_path } }, as: :json assert_response 200 end - test "should destroy public_relation" do + test 'should destroy public_relation' do assert_difference('PublicRelation.count', -1) do delete public_relation_url(@public_relation), as: :json end diff --git a/api/test/controllers/purchase_lists_controller_test.rb b/api/test/controllers/purchase_lists_controller_test.rb index 1b3a29e32..620223125 100644 --- a/api/test/controllers/purchase_lists_controller_test.rb +++ b/api/test/controllers/purchase_lists_controller_test.rb @@ -5,30 +5,32 @@ class PurchaseListsControllerTest < ActionDispatch::IntegrationTest @purchase_list = purchase_lists(:one) end - test "should get index" do + test 'should get index' do get purchase_lists_url, as: :json assert_response :success end - test "should create purchase_list" do + test 'should create purchase_list' do assert_difference('PurchaseList.count') do - post purchase_lists_url, params: { purchase_list: { fes_date_id: @purchase_list.fes_date_id, food_product_id: @purchase_list.food_product_id, is_fresh: @purchase_list.is_fresh, items: @purchase_list.items, shop_id: @purchase_list.shop_id } }, as: :json + post purchase_lists_url, + params: { purchase_list: { fes_date_id: @purchase_list.fes_date_id, food_product_id: @purchase_list.food_product_id, is_fresh: @purchase_list.is_fresh, items: @purchase_list.items, shop_id: @purchase_list.shop_id } }, as: :json end assert_response 201 end - test "should show purchase_list" do + test 'should show purchase_list' do get purchase_list_url(@purchase_list), as: :json assert_response :success end - test "should update purchase_list" do - patch purchase_list_url(@purchase_list), params: { purchase_list: { fes_date_id: @purchase_list.fes_date_id, food_product_id: @purchase_list.food_product_id, is_fresh: @purchase_list.is_fresh, items: @purchase_list.items, shop_id: @purchase_list.shop_id } }, as: :json + test 'should update purchase_list' do + patch purchase_list_url(@purchase_list), + params: { purchase_list: { fes_date_id: @purchase_list.fes_date_id, food_product_id: @purchase_list.food_product_id, is_fresh: @purchase_list.is_fresh, items: @purchase_list.items, shop_id: @purchase_list.shop_id } }, as: :json assert_response 200 end - test "should destroy purchase_list" do + test 'should destroy purchase_list' do assert_difference('PurchaseList.count', -1) do delete purchase_list_url(@purchase_list), as: :json end diff --git a/api/test/controllers/rentable_items_controller_test.rb b/api/test/controllers/rentable_items_controller_test.rb index cec8cb238..0f625cf24 100644 --- a/api/test/controllers/rentable_items_controller_test.rb +++ b/api/test/controllers/rentable_items_controller_test.rb @@ -5,30 +5,32 @@ class RentableItemsControllerTest < ActionDispatch::IntegrationTest @rentable_item = rentable_items(:one) end - test "should get index" do + test 'should get index' do get rentable_items_url, as: :json assert_response :success end - test "should create rentable_item" do + test 'should create rentable_item' do assert_difference('RentableItem.count') do - post rentable_items_url, params: { rentable_item: { max_num: @rentable_item.max_num, stocker_item_id: @rentable_item.stocker_item_id, stocker_place_id: @rentable_item.stocker_place_id } }, as: :json + post rentable_items_url, + params: { rentable_item: { max_num: @rentable_item.max_num, stocker_item_id: @rentable_item.stocker_item_id, stocker_place_id: @rentable_item.stocker_place_id } }, as: :json end assert_response 201 end - test "should show rentable_item" do + test 'should show rentable_item' do get rentable_item_url(@rentable_item), as: :json assert_response :success end - test "should update rentable_item" do - patch rentable_item_url(@rentable_item), params: { rentable_item: { max_num: @rentable_item.max_num, stocker_item_id: @rentable_item.stocker_item_id, stocker_place_id: @rentable_item.stocker_place_id } }, as: :json + test 'should update rentable_item' do + patch rentable_item_url(@rentable_item), + params: { rentable_item: { max_num: @rentable_item.max_num, stocker_item_id: @rentable_item.stocker_item_id, stocker_place_id: @rentable_item.stocker_place_id } }, as: :json assert_response 200 end - test "should destroy rentable_item" do + test 'should destroy rentable_item' do assert_difference('RentableItem.count', -1) do delete rentable_item_url(@rentable_item), as: :json end diff --git a/api/test/controllers/rental_orders_controller_test.rb b/api/test/controllers/rental_orders_controller_test.rb index 0b537c0eb..5c5322cf0 100644 --- a/api/test/controllers/rental_orders_controller_test.rb +++ b/api/test/controllers/rental_orders_controller_test.rb @@ -5,30 +5,32 @@ class RentalOrdersControllerTest < ActionDispatch::IntegrationTest @rental_order = rental_orders(:one) end - test "should get index" do + test 'should get index' do get rental_orders_url, as: :json assert_response :success end - test "should create rental_order" do + test 'should create rental_order' do assert_difference('RentalOrder.count') do - post rental_orders_url, params: { rental_order: { group_id: @rental_order.group_id, num: @rental_order.num, rental_item_id: @rental_order.rental_item_id } }, as: :json + post rental_orders_url, + params: { rental_order: { group_id: @rental_order.group_id, num: @rental_order.num, rental_item_id: @rental_order.rental_item_id } }, as: :json end assert_response 201 end - test "should show rental_order" do + test 'should show rental_order' do get rental_order_url(@rental_order), as: :json assert_response :success end - test "should update rental_order" do - patch rental_order_url(@rental_order), params: { rental_order: { group_id: @rental_order.group_id, num: @rental_order.num, rental_item_id: @rental_order.rental_item_id } }, as: :json + test 'should update rental_order' do + patch rental_order_url(@rental_order), + params: { rental_order: { group_id: @rental_order.group_id, num: @rental_order.num, rental_item_id: @rental_order.rental_item_id } }, as: :json assert_response 200 end - test "should destroy rental_order" do + test 'should destroy rental_order' do assert_difference('RentalOrder.count', -1) do delete rental_order_url(@rental_order), as: :json end diff --git a/api/test/controllers/stage_common_options_controller_test.rb b/api/test/controllers/stage_common_options_controller_test.rb index 44af5a8c9..82d32b29d 100644 --- a/api/test/controllers/stage_common_options_controller_test.rb +++ b/api/test/controllers/stage_common_options_controller_test.rb @@ -5,30 +5,32 @@ class StageCommonOptionsControllerTest < ActionDispatch::IntegrationTest @stage_common_option = stage_common_options(:one) end - test "should get index" do + test 'should get index' do get stage_common_options_url, as: :json assert_response :success end - test "should create stage_common_option" do + test 'should create stage_common_option' do assert_difference('StageCommonOption.count') do - post stage_common_options_url, params: { stage_common_option: { bgm: @stage_common_option.bgm, camera_permission: @stage_common_option.camera_permission, group_id: @stage_common_option.group_id, loud_sound: @stage_common_option.loud_sound, own_equipment: @stage_common_option.own_equipment } }, as: :json + post stage_common_options_url, + params: { stage_common_option: { bgm: @stage_common_option.bgm, camera_permission: @stage_common_option.camera_permission, group_id: @stage_common_option.group_id, loud_sound: @stage_common_option.loud_sound, own_equipment: @stage_common_option.own_equipment } }, as: :json end assert_response 201 end - test "should show stage_common_option" do + test 'should show stage_common_option' do get stage_common_option_url(@stage_common_option), as: :json assert_response :success end - test "should update stage_common_option" do - patch stage_common_option_url(@stage_common_option), params: { stage_common_option: { bgm: @stage_common_option.bgm, camera_permission: @stage_common_option.camera_permission, group_id: @stage_common_option.group_id, loud_sound: @stage_common_option.loud_sound, own_equipment: @stage_common_option.own_equipment } }, as: :json + test 'should update stage_common_option' do + patch stage_common_option_url(@stage_common_option), + params: { stage_common_option: { bgm: @stage_common_option.bgm, camera_permission: @stage_common_option.camera_permission, group_id: @stage_common_option.group_id, loud_sound: @stage_common_option.loud_sound, own_equipment: @stage_common_option.own_equipment } }, as: :json assert_response 200 end - test "should destroy stage_common_option" do + test 'should destroy stage_common_option' do assert_difference('StageCommonOption.count', -1) do delete stage_common_option_url(@stage_common_option), as: :json end diff --git a/api/test/controllers/stage_number_controller_test.rb b/api/test/controllers/stage_number_controller_test.rb index 84019461c..e124eead6 100644 --- a/api/test/controllers/stage_number_controller_test.rb +++ b/api/test/controllers/stage_number_controller_test.rb @@ -1,4 +1,4 @@ -require "test_helper" +require 'test_helper' class StageNumberControllerTest < ActionDispatch::IntegrationTest # test "the truth" do diff --git a/api/test/controllers/stage_orders_controller_test.rb b/api/test/controllers/stage_orders_controller_test.rb index ae041e243..ba68db496 100644 --- a/api/test/controllers/stage_orders_controller_test.rb +++ b/api/test/controllers/stage_orders_controller_test.rb @@ -5,30 +5,32 @@ class StageOrdersControllerTest < ActionDispatch::IntegrationTest @stage_order = stage_orders(:one) end - test "should get index" do + test 'should get index' do get stage_orders_url, as: :json assert_response :success end - test "should create stage_order" do + test 'should create stage_order' do assert_difference('StageOrder.count') do - post stage_orders_url, params: { stage_order: { cleanup_end_time: @stage_order.cleanup_end_time, cleanup_time_interval: @stage_order.cleanup_time_interval, fes_date_id: @stage_order.fes_date_id, group_id: @stage_order.group_id, is_sunny: @stage_order.is_sunny, performance_end_time: @stage_order.performance_end_time, performance_start_time: @stage_order.performance_start_time, prepare_start_time: @stage_order.prepare_start_time, prepare_time_interval: @stage_order.prepare_time_interval, stage_first: @stage_order.stage_first, stage_second: @stage_order.stage_second, use_time_interval: @stage_order.use_time_interval } }, as: :json + post stage_orders_url, + params: { stage_order: { cleanup_end_time: @stage_order.cleanup_end_time, cleanup_time_interval: @stage_order.cleanup_time_interval, fes_date_id: @stage_order.fes_date_id, group_id: @stage_order.group_id, is_sunny: @stage_order.is_sunny, performance_end_time: @stage_order.performance_end_time, performance_start_time: @stage_order.performance_start_time, prepare_start_time: @stage_order.prepare_start_time, prepare_time_interval: @stage_order.prepare_time_interval, stage_first: @stage_order.stage_first, stage_second: @stage_order.stage_second, use_time_interval: @stage_order.use_time_interval } }, as: :json end assert_response 201 end - test "should show stage_order" do + test 'should show stage_order' do get stage_order_url(@stage_order), as: :json assert_response :success end - test "should update stage_order" do - patch stage_order_url(@stage_order), params: { stage_order: { cleanup_end_time: @stage_order.cleanup_end_time, cleanup_time_interval: @stage_order.cleanup_time_interval, fes_date_id: @stage_order.fes_date_id, group_id: @stage_order.group_id, is_sunny: @stage_order.is_sunny, performance_end_time: @stage_order.performance_end_time, performance_start_time: @stage_order.performance_start_time, prepare_start_time: @stage_order.prepare_start_time, prepare_time_interval: @stage_order.prepare_time_interval, stage_first: @stage_order.stage_first, stage_second: @stage_order.stage_second, use_time_interval: @stage_order.use_time_interval } }, as: :json + test 'should update stage_order' do + patch stage_order_url(@stage_order), + params: { stage_order: { cleanup_end_time: @stage_order.cleanup_end_time, cleanup_time_interval: @stage_order.cleanup_time_interval, fes_date_id: @stage_order.fes_date_id, group_id: @stage_order.group_id, is_sunny: @stage_order.is_sunny, performance_end_time: @stage_order.performance_end_time, performance_start_time: @stage_order.performance_start_time, prepare_start_time: @stage_order.prepare_start_time, prepare_time_interval: @stage_order.prepare_time_interval, stage_first: @stage_order.stage_first, stage_second: @stage_order.stage_second, use_time_interval: @stage_order.use_time_interval } }, as: :json assert_response 200 end - test "should destroy stage_order" do + test 'should destroy stage_order' do assert_difference('StageOrder.count', -1) do delete stage_order_url(@stage_order), as: :json end diff --git a/api/test/controllers/stocker_items_controller_test.rb b/api/test/controllers/stocker_items_controller_test.rb index ec03dc559..f6b2f710f 100644 --- a/api/test/controllers/stocker_items_controller_test.rb +++ b/api/test/controllers/stocker_items_controller_test.rb @@ -5,30 +5,32 @@ class StockerItemsControllerTest < ActionDispatch::IntegrationTest @stocker_item = stocker_items(:one) end - test "should get index" do + test 'should get index' do get stocker_items_url, as: :json assert_response :success end - test "should create stocker_item" do + test 'should create stocker_item' do assert_difference('StockerItem.count') do - post stocker_items_url, params: { stocker_item: { fes_year_id: @stocker_item.fes_year_id, num: @stocker_item.num, rental_item_id: @stocker_item.rental_item_id, stocker_place_id: @stocker_item.stocker_place_id } }, as: :json + post stocker_items_url, + params: { stocker_item: { fes_year_id: @stocker_item.fes_year_id, num: @stocker_item.num, rental_item_id: @stocker_item.rental_item_id, stocker_place_id: @stocker_item.stocker_place_id } }, as: :json end assert_response 201 end - test "should show stocker_item" do + test 'should show stocker_item' do get stocker_item_url(@stocker_item), as: :json assert_response :success end - test "should update stocker_item" do - patch stocker_item_url(@stocker_item), params: { stocker_item: { fes_year_id: @stocker_item.fes_year_id, num: @stocker_item.num, rental_item_id: @stocker_item.rental_item_id, stocker_place_id: @stocker_item.stocker_place_id } }, as: :json + test 'should update stocker_item' do + patch stocker_item_url(@stocker_item), + params: { stocker_item: { fes_year_id: @stocker_item.fes_year_id, num: @stocker_item.num, rental_item_id: @stocker_item.rental_item_id, stocker_place_id: @stocker_item.stocker_place_id } }, as: :json assert_response 200 end - test "should destroy stocker_item" do + test 'should destroy stocker_item' do assert_difference('StockerItem.count', -1) do delete stocker_item_url(@stocker_item), as: :json end diff --git a/api/test/controllers/sub_reps_controller_test.rb b/api/test/controllers/sub_reps_controller_test.rb index f77441c22..16873ae34 100644 --- a/api/test/controllers/sub_reps_controller_test.rb +++ b/api/test/controllers/sub_reps_controller_test.rb @@ -5,30 +5,32 @@ class SubRepsControllerTest < ActionDispatch::IntegrationTest @sub_rep = sub_reps(:one) end - test "should get index" do + test 'should get index' do get sub_reps_url, as: :json assert_response :success end - test "should create sub_rep" do + test 'should create sub_rep' do assert_difference('SubRep.count') do - post sub_reps_url, params: { sub_rep: { department_id: @sub_rep.department_id, email: @sub_rep.email, grade_id: @sub_rep.grade_id, group_id: @sub_rep.group_id, name: @sub_rep.name, tel: @sub_rep.tel } }, as: :json + post sub_reps_url, + params: { sub_rep: { department_id: @sub_rep.department_id, email: @sub_rep.email, grade_id: @sub_rep.grade_id, group_id: @sub_rep.group_id, name: @sub_rep.name, tel: @sub_rep.tel } }, as: :json end assert_response 201 end - test "should show sub_rep" do + test 'should show sub_rep' do get sub_rep_url(@sub_rep), as: :json assert_response :success end - test "should update sub_rep" do - patch sub_rep_url(@sub_rep), params: { sub_rep: { department_id: @sub_rep.department_id, email: @sub_rep.email, grade_id: @sub_rep.grade_id, group_id: @sub_rep.group_id, name: @sub_rep.name, tel: @sub_rep.tel } }, as: :json + test 'should update sub_rep' do + patch sub_rep_url(@sub_rep), + params: { sub_rep: { department_id: @sub_rep.department_id, email: @sub_rep.email, grade_id: @sub_rep.grade_id, group_id: @sub_rep.group_id, name: @sub_rep.name, tel: @sub_rep.tel } }, as: :json assert_response 200 end - test "should destroy sub_rep" do + test 'should destroy sub_rep' do assert_difference('SubRep.count', -1) do delete sub_rep_url(@sub_rep), as: :json end diff --git a/api/test/controllers/user_details_controller_test.rb b/api/test/controllers/user_details_controller_test.rb index be03851f1..4e2707b57 100644 --- a/api/test/controllers/user_details_controller_test.rb +++ b/api/test/controllers/user_details_controller_test.rb @@ -5,30 +5,32 @@ class UserDetailsControllerTest < ActionDispatch::IntegrationTest @user_detail = user_details(:one) end - test "should get index" do + test 'should get index' do get user_details_url, as: :json assert_response :success end - test "should create user_detail" do + test 'should create user_detail' do assert_difference('UserDetail.count') do - post user_details_url, params: { user_detail: { department_id: @user_detail.department_id, grade_id: @user_detail.grade_id, tel: @user_detail.tel, user_id: @user_detail.user_id } }, as: :json + post user_details_url, + params: { user_detail: { department_id: @user_detail.department_id, grade_id: @user_detail.grade_id, tel: @user_detail.tel, user_id: @user_detail.user_id } }, as: :json end assert_response 201 end - test "should show user_detail" do + test 'should show user_detail' do get user_detail_url(@user_detail), as: :json assert_response :success end - test "should update user_detail" do - patch user_detail_url(@user_detail), params: { user_detail: { department_id: @user_detail.department_id, grade_id: @user_detail.grade_id, tel: @user_detail.tel, user_id: @user_detail.user_id } }, as: :json + test 'should update user_detail' do + patch user_detail_url(@user_detail), + params: { user_detail: { department_id: @user_detail.department_id, grade_id: @user_detail.grade_id, tel: @user_detail.tel, user_id: @user_detail.user_id } }, as: :json assert_response 200 end - test "should destroy user_detail" do + test 'should destroy user_detail' do assert_difference('UserDetail.count', -1) do delete user_detail_url(@user_detail), as: :json end diff --git a/api/test/controllers/user_page_settings_controller_test.rb b/api/test/controllers/user_page_settings_controller_test.rb index d71a11638..15a925ea4 100644 --- a/api/test/controllers/user_page_settings_controller_test.rb +++ b/api/test/controllers/user_page_settings_controller_test.rb @@ -5,30 +5,32 @@ class UserPageSettingsControllerTest < ActionDispatch::IntegrationTest @user_page_setting = user_page_settings(:one) end - test "should get index" do + test 'should get index' do get user_page_settings_url, as: :json assert_response :success end - test "should create user_page_setting" do + test 'should create user_page_setting' do assert_difference('UserPageSetting.count') do - post user_page_settings_url, params: { user_page_setting: { is_edit_employee: @user_page_setting.is_edit_employee, is_edit_food_product: @user_page_setting.is_edit_food_product, is_edit_group: @user_page_setting.is_edit_group, is_edit_place: @user_page_setting.is_edit_place, is_edit_power_order: @user_page_setting.is_edit_power_order, is_edit_purchase_list: @user_page_setting.is_edit_purchase_list, is_edit_rental_order: @user_page_setting.is_edit_rental_order, is_edit_stage_order: @user_page_setting.is_edit_stage_order, is_edit_sub_rep: @user_page_setting.is_edit_sub_rep, is_regist_food_product: @user_page_setting.is_regist_food_product, is_regist_group: @user_page_setting.is_regist_group } }, as: :json + post user_page_settings_url, + params: { user_page_setting: { is_edit_employee: @user_page_setting.is_edit_employee, is_edit_food_product: @user_page_setting.is_edit_food_product, is_edit_group: @user_page_setting.is_edit_group, is_edit_place: @user_page_setting.is_edit_place, is_edit_power_order: @user_page_setting.is_edit_power_order, is_edit_purchase_list: @user_page_setting.is_edit_purchase_list, is_edit_rental_order: @user_page_setting.is_edit_rental_order, is_edit_stage_order: @user_page_setting.is_edit_stage_order, is_edit_sub_rep: @user_page_setting.is_edit_sub_rep, is_regist_food_product: @user_page_setting.is_regist_food_product, is_regist_group: @user_page_setting.is_regist_group } }, as: :json end assert_response 201 end - test "should show user_page_setting" do + test 'should show user_page_setting' do get user_page_setting_url(@user_page_setting), as: :json assert_response :success end - test "should update user_page_setting" do - patch user_page_setting_url(@user_page_setting), params: { user_page_setting: { is_edit_employee: @user_page_setting.is_edit_employee, is_edit_food_product: @user_page_setting.is_edit_food_product, is_edit_group: @user_page_setting.is_edit_group, is_edit_place: @user_page_setting.is_edit_place, is_edit_power_order: @user_page_setting.is_edit_power_order, is_edit_purchase_list: @user_page_setting.is_edit_purchase_list, is_edit_rental_order: @user_page_setting.is_edit_rental_order, is_edit_stage_order: @user_page_setting.is_edit_stage_order, is_edit_sub_rep: @user_page_setting.is_edit_sub_rep, is_regist_food_product: @user_page_setting.is_regist_food_product, is_regist_group: @user_page_setting.is_regist_group } }, as: :json + test 'should update user_page_setting' do + patch user_page_setting_url(@user_page_setting), + params: { user_page_setting: { is_edit_employee: @user_page_setting.is_edit_employee, is_edit_food_product: @user_page_setting.is_edit_food_product, is_edit_group: @user_page_setting.is_edit_group, is_edit_place: @user_page_setting.is_edit_place, is_edit_power_order: @user_page_setting.is_edit_power_order, is_edit_purchase_list: @user_page_setting.is_edit_purchase_list, is_edit_rental_order: @user_page_setting.is_edit_rental_order, is_edit_stage_order: @user_page_setting.is_edit_stage_order, is_edit_sub_rep: @user_page_setting.is_edit_sub_rep, is_regist_food_product: @user_page_setting.is_regist_food_product, is_regist_group: @user_page_setting.is_regist_group } }, as: :json assert_response 200 end - test "should destroy user_page_setting" do + test 'should destroy user_page_setting' do assert_difference('UserPageSetting.count', -1) do delete user_page_setting_url(@user_page_setting), as: :json end diff --git a/api/test/controllers/venue_maps_controller_test.rb b/api/test/controllers/venue_maps_controller_test.rb index 63addca6e..0f9b02662 100644 --- a/api/test/controllers/venue_maps_controller_test.rb +++ b/api/test/controllers/venue_maps_controller_test.rb @@ -1,4 +1,4 @@ -require "test_helper" +require 'test_helper' class VenueMapsControllerTest < ActionDispatch::IntegrationTest # test "the truth" do diff --git a/api/test/models/announcement_test.rb b/api/test/models/announcement_test.rb index 7f9201998..ed6980bc5 100644 --- a/api/test/models/announcement_test.rb +++ b/api/test/models/announcement_test.rb @@ -1,4 +1,4 @@ -require "test_helper" +require 'test_helper' class AnnouncementTest < ActiveSupport::TestCase # test "the truth" do diff --git a/api/test/models/contact_person_test.rb b/api/test/models/contact_person_test.rb index d2fb65776..8ebd67739 100644 --- a/api/test/models/contact_person_test.rb +++ b/api/test/models/contact_person_test.rb @@ -1,4 +1,4 @@ -require "test_helper" +require 'test_helper' class ContactPersonTest < ActiveSupport::TestCase # test "the truth" do diff --git a/api/test/models/cooking_process_order_test.rb b/api/test/models/cooking_process_order_test.rb index a4da8e40d..d79599153 100644 --- a/api/test/models/cooking_process_order_test.rb +++ b/api/test/models/cooking_process_order_test.rb @@ -1,4 +1,4 @@ -require "test_helper" +require 'test_helper' class CookingProcessOrderTest < ActiveSupport::TestCase # test "the truth" do diff --git a/api/test/models/current_stock_test.rb b/api/test/models/current_stock_test.rb index 462de6cad..513355ccb 100644 --- a/api/test/models/current_stock_test.rb +++ b/api/test/models/current_stock_test.rb @@ -1,4 +1,4 @@ -require "test_helper" +require 'test_helper' class CurrentStockTest < ActiveSupport::TestCase # test "the truth" do diff --git a/api/test/models/group_identification_test.rb b/api/test/models/group_identification_test.rb index 02ee439ec..0ebadccea 100644 --- a/api/test/models/group_identification_test.rb +++ b/api/test/models/group_identification_test.rb @@ -1,4 +1,4 @@ -require "test_helper" +require 'test_helper' class GroupIdentificationTest < ActiveSupport::TestCase # test "the truth" do diff --git a/api/test/models/item_adjustment_test.rb b/api/test/models/item_adjustment_test.rb index 3b3b46637..2857c2c79 100644 --- a/api/test/models/item_adjustment_test.rb +++ b/api/test/models/item_adjustment_test.rb @@ -1,4 +1,4 @@ -require "test_helper" +require 'test_helper' class ItemAdjustmentTest < ActiveSupport::TestCase # test "the truth" do diff --git a/api/test/models/place_number_test.rb b/api/test/models/place_number_test.rb index 9666675fc..2e99f2d47 100644 --- a/api/test/models/place_number_test.rb +++ b/api/test/models/place_number_test.rb @@ -1,4 +1,4 @@ -require "test_helper" +require 'test_helper' class PlaceNumberTest < ActiveSupport::TestCase # test "the truth" do diff --git a/api/test/models/public_relation_test.rb b/api/test/models/public_relation_test.rb index 373bb9aec..563436f0a 100644 --- a/api/test/models/public_relation_test.rb +++ b/api/test/models/public_relation_test.rb @@ -1,4 +1,4 @@ -require "test_helper" +require 'test_helper' class PublicRelationTest < ActiveSupport::TestCase # test "the truth" do diff --git a/api/test/models/stage_number_test.rb b/api/test/models/stage_number_test.rb index 11c09ad1c..b568a2458 100644 --- a/api/test/models/stage_number_test.rb +++ b/api/test/models/stage_number_test.rb @@ -1,4 +1,4 @@ -require "test_helper" +require 'test_helper' class StageNumberTest < ActiveSupport::TestCase # test "the truth" do diff --git a/api/test/models/stool_test_test.rb b/api/test/models/stool_test_test.rb index b9af53fa9..c1bbb9847 100644 --- a/api/test/models/stool_test_test.rb +++ b/api/test/models/stool_test_test.rb @@ -1,4 +1,4 @@ -require "test_helper" +require 'test_helper' class StoolTestTest < ActiveSupport::TestCase # test "the truth" do diff --git a/api/test/models/venue_map_test.rb b/api/test/models/venue_map_test.rb index 1582e5c3f..0a8a07c01 100644 --- a/api/test/models/venue_map_test.rb +++ b/api/test/models/venue_map_test.rb @@ -1,4 +1,4 @@ -require "test_helper" +require 'test_helper' class VenueMapTest < ActiveSupport::TestCase # test "the truth" do From bc0d49f745e017b46d54797717428c2ff37cb7ad Mon Sep 17 00:00:00 2001 From: nose221834 Date: Sun, 6 Apr 2025 23:12:37 +0900 Subject: [PATCH 003/285] chore: bundle exec rubocup -A --- api/Gemfile | 2 + api/Rakefile | 2 + api/app/channels/application_cable/channel.rb | 2 + .../channels/application_cable/connection.rb | 2 + .../controllers/announcements_controller.rb | 8 +- .../api/auth/registrations_controller.rb | 2 + .../api/auth/sessions_controller.rb | 2 + .../api/v1/announcements_api_controller.rb | 116 ++- .../v1/assign_rental_items_api_controller.rb | 138 +-- .../cooking_process_orders_api_controller.rb | 64 +- .../api/v1/current_user_api_controller.rb | 110 +- .../api/v1/dashboard_api_controller.rb | 106 +- .../api/v1/employees_api_controller.rb | 98 +- .../api/v1/fes_dates_api_controller.rb | 34 +- .../api/v1/food_products_api_controller.rb | 208 ++-- .../api/v1/groups_api_controller.rb | 164 +-- .../api/v1/order_infos_api_controller.rb | 64 +- .../v1/order_status_check_api_controller.rb | 126 +-- .../api/v1/output_csv_controller.rb | 948 +++++++++--------- .../v1/place_allow_lists_api_controller.rb | 8 +- .../api/v1/place_orders_api_controller.rb | 111 +- .../api/v1/power_orders_api_controller.rb | 98 +- .../api/v1/public_relations_api_controller.rb | 84 +- .../api/v1/purchase_lists_api_controller.rb | 118 +-- .../rental_item_allow_lists_api_controller.rb | 8 +- .../api/v1/rental_items_api_controller.rb | 64 +- .../api/v1/rental_orders_api_controller.rb | 232 ++--- .../api/v1/representatives_api_controller.rb | 114 ++- .../v1/stage_common_options_api_controller.rb | 125 +-- .../api/v1/stage_orders_api_controller.rb | 111 +- .../api/v1/stocker_items_api_controller.rb | 74 +- .../api/v1/sub_rep_api_controller.rb | 24 +- .../controllers/api/v1/users_controller.rb | 186 ++-- .../api/v1/venue_maps_api_controller.rb | 84 +- api/app/controllers/application_controller.rb | 2 + .../assign_group_places_controller.rb | 8 +- .../assign_rental_items_controller.rb | 8 +- .../controllers/assign_stages_controller.rb | 8 +- .../controllers/contact_persons_controller.rb | 2 + .../cooking_process_orders_controller.rb | 6 +- .../controllers/current_stocks_controller.rb | 8 +- api/app/controllers/employees_controller.rb | 8 +- api/app/controllers/fes_dates_controller.rb | 8 +- api/app/controllers/fes_years_controller.rb | 6 +- .../controllers/food_products_controller.rb | 8 +- .../group_categories_controller.rb | 8 +- .../group_identification_controller.rb | 14 +- api/app/controllers/groups_controller.rb | 14 +- api/app/controllers/memos_controller.rb | 8 +- api/app/controllers/news_controller.rb | 8 +- .../place_allow_lists_controller.rb | 8 +- .../controllers/place_number_controller.rb | 14 +- .../controllers/place_orders_controller.rb | 8 +- api/app/controllers/places_controller.rb | 8 +- .../controllers/power_orders_controller.rb | 8 +- api/app/controllers/print_pdf_controller.rb | 4 +- .../public_relations_controller.rb | 8 +- .../controllers/purchase_lists_controller.rb | 8 +- .../controllers/rentable_items_controller.rb | 8 +- .../rental_item_allow_lists_controller.rb | 8 +- .../controllers/rental_items_controller.rb | 8 +- .../controllers/rental_orders_controller.rb | 8 +- api/app/controllers/shops_controller.rb | 8 +- .../stage_common_options_controller.rb | 8 +- .../controllers/stage_number_controller.rb | 10 +- .../controllers/stage_orders_controller.rb | 8 +- api/app/controllers/stages_controller.rb | 8 +- .../controllers/stocker_items_controller.rb | 8 +- .../controllers/stocker_places_controller.rb | 8 +- api/app/controllers/sub_reps_controller.rb | 8 +- .../controllers/user_details_controller.rb | 8 +- .../user_page_settings_controller.rb | 8 +- api/app/controllers/users_controller.rb | 11 +- api/app/controllers/venue_maps_controller.rb | 8 +- api/app/jobs/application_job.rb | 2 + api/app/mailers/application_mailer.rb | 2 + api/app/models/announcement.rb | 2 + api/app/models/application_record.rb | 2 + api/app/models/assign_group_place.rb | 2 + api/app/models/assign_rental_item.rb | 2 + api/app/models/assign_stage.rb | 2 + api/app/models/contact_person.rb | 2 + api/app/models/cooking_process_order.rb | 2 + api/app/models/current_stock.rb | 2 + api/app/models/department.rb | 2 + api/app/models/employee.rb | 2 + api/app/models/fes_date.rb | 2 + api/app/models/fes_year.rb | 2 + api/app/models/food_product.rb | 2 + api/app/models/grade.rb | 2 + api/app/models/group.rb | 314 +++--- api/app/models/group_category.rb | 2 + api/app/models/group_identification.rb | 2 + api/app/models/item_adjustment.rb | 2 + api/app/models/memo.rb | 2 + api/app/models/news.rb | 2 + api/app/models/place.rb | 2 + api/app/models/place_allow_list.rb | 2 + api/app/models/place_number.rb | 2 + api/app/models/place_order.rb | 2 + api/app/models/power_order.rb | 2 + api/app/models/public_relation.rb | 2 + api/app/models/purchase_list.rb | 2 + api/app/models/rentable_item.rb | 2 + api/app/models/rental_item.rb | 2 + api/app/models/rental_item_allow_list.rb | 2 + api/app/models/rental_order.rb | 2 + api/app/models/role.rb | 2 + api/app/models/shop.rb | 2 + api/app/models/stage.rb | 2 + api/app/models/stage_common_option.rb | 2 + api/app/models/stage_number.rb | 2 + api/app/models/stage_order.rb | 2 + api/app/models/stocker_item.rb | 2 + api/app/models/stocker_place.rb | 2 + api/app/models/stool_test.rb | 2 + api/app/models/sub_rep.rb | 2 + api/app/models/user.rb | 22 +- api/app/models/user_detail.rb | 2 + api/app/models/user_page_setting.rb | 2 + api/app/models/venue_map.rb | 2 + .../_assign_group_place.json.jbuilder | 2 + .../assign_group_places/index.json.jbuilder | 2 + .../assign_group_places/show.json.jbuilder | 2 + .../_assign_rental_item.json.jbuilder | 2 + .../assign_rental_items/index.json.jbuilder | 2 + .../assign_rental_items/show.json.jbuilder | 2 + .../assign_stages/_assign_stage.json.jbuilder | 2 + .../views/assign_stages/index.json.jbuilder | 2 + .../views/assign_stages/show.json.jbuilder | 2 + .../views/employees/_employee.json.jbuilder | 2 + api/app/views/employees/index.json.jbuilder | 2 + api/app/views/employees/show.json.jbuilder | 2 + .../food_products/_food_product.json.jbuilder | 2 + .../views/food_products/index.json.jbuilder | 2 + .../views/food_products/show.json.jbuilder | 2 + api/app/views/groups/_group.json.jbuilder | 2 + api/app/views/groups/index.json.jbuilder | 2 + api/app/views/groups/show.json.jbuilder | 2 + api/app/views/memos/_memo.json.jbuilder | 2 + api/app/views/memos/index.json.jbuilder | 2 + api/app/views/memos/show.json.jbuilder | 2 + api/app/views/news/_news.json.jbuilder | 2 + api/app/views/news/index.json.jbuilder | 2 + api/app/views/news/show.json.jbuilder | 2 + .../_place_allow_list.json.jbuilder | 2 + .../place_allow_lists/index.json.jbuilder | 2 + .../place_allow_lists/show.json.jbuilder | 2 + .../place_orders/_place_order.json.jbuilder | 2 + .../views/place_orders/index.json.jbuilder | 2 + api/app/views/place_orders/show.json.jbuilder | 2 + .../power_orders/_power_order.json.jbuilder | 2 + .../views/power_orders/index.json.jbuilder | 2 + api/app/views/power_orders/show.json.jbuilder | 2 + .../_public_relation.json.jbuilder | 2 + .../public_relations/index.json.jbuilder | 2 + .../views/public_relations/show.json.jbuilder | 2 + .../_purchase_list.json.jbuilder | 2 + .../views/purchase_lists/index.json.jbuilder | 2 + .../views/purchase_lists/show.json.jbuilder | 2 + .../_rentable_item.json.jbuilder | 2 + .../views/rentable_items/index.json.jbuilder | 2 + .../views/rentable_items/show.json.jbuilder | 2 + .../rental_orders/_rental_order.json.jbuilder | 2 + .../views/rental_orders/index.json.jbuilder | 2 + .../views/rental_orders/show.json.jbuilder | 2 + .../_stage_common_option.json.jbuilder | 2 + .../stage_common_options/index.json.jbuilder | 2 + .../stage_common_options/show.json.jbuilder | 2 + .../stage_orders/_stage_order.json.jbuilder | 2 + .../views/stage_orders/index.json.jbuilder | 2 + api/app/views/stage_orders/show.json.jbuilder | 2 + .../stocker_items/_stocker_item.json.jbuilder | 2 + .../views/stocker_items/index.json.jbuilder | 2 + .../views/stocker_items/show.json.jbuilder | 2 + api/app/views/sub_reps/_sub_rep.json.jbuilder | 2 + api/app/views/sub_reps/index.json.jbuilder | 2 + api/app/views/sub_reps/show.json.jbuilder | 2 + .../user_details/_user_detail.json.jbuilder | 2 + .../views/user_details/index.json.jbuilder | 2 + api/app/views/user_details/show.json.jbuilder | 2 + .../_user_page_setting.json.jbuilder | 2 + .../user_page_settings/index.json.jbuilder | 2 + .../user_page_settings/show.json.jbuilder | 2 + api/bin/bundle | 2 +- api/bin/rails | 2 + api/bin/rake | 2 + api/bin/setup | 2 + api/bin/spring | 1 + api/config.ru | 2 + api/config/application.rb | 2 + api/config/boot.rb | 2 + api/config/environment.rb | 2 + api/config/environments/development.rb | 2 + api/config/environments/production.rb | 4 +- api/config/environments/test.rb | 2 + .../application_controller_renderer.rb | 2 + .../initializers/backtrace_silencers.rb | 2 + api/config/initializers/cors.rb | 2 + .../initializers/filter_parameter_logging.rb | 2 + api/config/initializers/inflections.rb | 2 + api/config/initializers/wrap_parameters.rb | 2 + api/config/puma.rb | 10 +- api/config/routes.rb | 2 + api/config/spring.rb | 2 + api/db/fixtures/develop/announcement.rb | 2 + api/db/fixtures/develop/assign_group_place.rb | 2 + api/db/fixtures/develop/assign_rental_item.rb | 2 + api/db/fixtures/develop/assign_stage.rb | 2 + api/db/fixtures/develop/department.rb | 2 + api/db/fixtures/develop/employee.rb | 2 + api/db/fixtures/develop/fes_year_date.rb | 2 + api/db/fixtures/develop/food_product.rb | 2 + api/db/fixtures/develop/grade.rb | 2 + api/db/fixtures/develop/group.rb | 2 + api/db/fixtures/develop/group_category.rb | 2 + api/db/fixtures/develop/memo.rb | 2 + api/db/fixtures/develop/news.rb | 2 + api/db/fixtures/develop/place.rb | 2 + api/db/fixtures/develop/place_allow_list.rb | 2 + api/db/fixtures/develop/place_order.rb | 2 + api/db/fixtures/develop/power_order.rb | 2 + api/db/fixtures/develop/purchase_list.rb | 2 + api/db/fixtures/develop/rentable_item.rb | 2 + api/db/fixtures/develop/rental_item.rb | 2 + .../develop/rental_item_allow_list.rb | 2 + api/db/fixtures/develop/rental_order.rb | 2 + api/db/fixtures/develop/role.rb | 2 + api/db/fixtures/develop/shop.rb | 2 + api/db/fixtures/develop/stage.rb | 2 + .../fixtures/develop/stage_common_option.rb | 2 + api/db/fixtures/develop/stage_order.rb | 2 + api/db/fixtures/develop/stocker_item.rb | 2 + api/db/fixtures/develop/stocker_place.rb | 2 + api/db/fixtures/develop/stool_test.rb | 2 + api/db/fixtures/develop/sub_rep.rb | 2 + api/db/fixtures/develop/user.rb | 2 + api/db/fixtures/develop/user_detail.rb | 2 + api/db/fixtures/develop/user_page_setting.rb | 2 + api/db/fixtures/production/department.rb | 2 + api/db/fixtures/production/fes_year_date.rb | 2 + api/db/fixtures/production/grade.rb | 2 + api/db/fixtures/production/group_category.rb | 2 + api/db/fixtures/production/place.rb | 2 + .../fixtures/production/place_allow_list.rb | 2 + api/db/fixtures/production/rental_item.rb | 2 + .../production/rental_item_allow_list.rb | 2 + api/db/fixtures/production/role.rb | 2 + api/db/fixtures/production/shop.rb | 2 + api/db/fixtures/production/stage.rb | 2 + api/db/fixtures/production/stocker_place.rb | 2 + api/db/fixtures/production/stool_test.rb | 2 + api/db/fixtures/production/user.rb | 2 + api/db/fixtures/production/user_detail.rb | 2 + .../fixtures/production/user_page_setting.rb | 2 + ...20152841_devise_token_auth_create_users.rb | 2 + api/db/migrate/20200819154942_create_roles.rb | 2 + .../20200819160209_create_user_details.rb | 2 + .../20200819181359_create_departments.rb | 2 + ...19182026_change_data_tel_to_user_detail.rb | 2 + .../migrate/20200819183322_create_grades.rb | 2 + .../migrate/20200901115623_create_groups.rb | 2 + .../20200901130840_create_fes_years.rb | 2 + .../20200901132622_create_group_categories.rb | 2 + ...00908104044_create_stage_common_options.rb | 2 + .../20200909071344_create_power_orders.rb | 2 + .../migrate/20200922082227_create_sub_reps.rb | 2 + .../20200922084540_add_details_to_sub_reps.rb | 2 + .../20200922104844_create_employees.rb | 2 + ...29082751_add_student_id_to_user_details.rb | 2 + .../migrate/20200929112608_create_places.rb | 2 + .../20201006073800_create_place_orders.rb | 2 + ...201006074956_create_assign_group_places.rb | 2 + ...20201006080344_create_place_allow_lists.rb | 2 + ...name_manufacture_column_to_power_orders.rb | 2 + ...1020114034_add_item_url_to_power_orders.rb | 2 + ...ove_employee_category_id_from_employees.rb | 2 + .../migrate/20201103073931_create_stages.rb | 2 + .../20201103081819_create_fes_dates.rb | 2 + .../20201106070551_create_stage_orders.rb | 2 + .../20201106075546_create_assign_stages.rb | 2 + .../20201118104455_create_food_products.rb | 2 + .../20201118105401_create_purchase_lists.rb | 2 + api/db/migrate/20201124082556_create_shops.rb | 2 + .../20201124110324_create_rental_items.rb | 2 + ...24113027_create_rental_item_allow_lists.rb | 2 + .../20201129024331_create_rental_orders.rb | 2 + .../20201129035145_create_stocker_places.rb | 2 + api/db/migrate/20201129050024_create_news.rb | 2 + .../20201129061920_create_stocker_items.rb | 2 + .../20201129070231_create_rentable_items.rb | 2 + ...201129073820_create_assign_rental_items.rb | 2 + api/db/migrate/20210203150104_create_memos.rb | 2 + ...ype_assign_rental_itemofrental_order_id.rb | 2 + ...e_item_id_column_to_assign_rental_items.rb | 2 + ..._stocker_place_id_to_assign_rental_item.rb | 2 + ...214160527_add_details_to_stocker_places.rb | 2 + ...0210221070515_create_user_page_settings.rb | 2 + ...15616_add_columns_to_user_page_settings.rb | 2 + ...3_add_fes_year_id_to_user_page_settings.rb | 2 + ...0123012848_create_group_identifications.rb | 2 + .../20220123030856_create_place_numbers.rb | 2 + .../20220125035856_create_stage_numbers.rb | 2 + .../20220305120323_create_public_relations.rb | 2 + .../20220410030808_add_column_rental_items.rb | 2 + .../20220410050111_create_stool_tests.rb | 2 + .../20220410050932_add_column_employee.rb | 2 + .../20221028083651_add_committee_to_groups.rb | 2 + ...35_add_announcement_to_public_relations.rb | 2 + .../20230501042741_create_venue_maps.rb | 2 + ...emove_public_relation_from_announcement.rb | 2 + .../20230501070947_create_announcements.rb | 2 + ...utside_rentable_columns_to_rental_items.rb | 2 + ...move_is_shop_rentable_from_rental_items.rb | 2 + ...0230525071401_add_column_purchase_lists.rb | 2 + ...edit_announcement_to_user_page_settings.rb | 2 + ..._add_announcement_to_user_page_settings.rb | 2 + .../20240307061007_create_item_adjustments.rb | 2 + .../20240307061926_create_current_stocks.rb | 2 + ..._add_is_edit_user_to_user_page_settings.rb | 2 + ...418122445_create_cooking_process_orders.rb | 2 + ...18124539_add_is_international_to_groups.rb | 2 + ...0240507003226_add_is_external_to_groups.rb | 2 + .../20240507065259_create_contact_people.rb | 2 + ...40513081443_add_status_to_announcements.rb | 2 + ...522012844_modify_cooking_process_orders.rb | 2 + api/db/schema.rb | 2 + api/db/seeds.rb | 2 + api/db/user.rb | 2 + .../application_cable/connection_test.rb | 20 +- .../announcements_controller_test.rb | 2 + .../api/auth/registrations_controller_test.rb | 14 +- .../api/v1/users_controller_test.rb | 14 +- .../assign_group_places_controller_test.rb | 2 + .../assign_rental_items_controller_test.rb | 2 + .../assign_stages_controller_test.rb | 2 + .../cooking_process_orders_controller_test.rb | 2 + .../current_stocks_controller_test.rb | 2 + .../controllers/employees_controller_test.rb | 2 + .../food_products_controller_test.rb | 2 + .../group_categories_controller_test.rb | 2 + .../group_identification_controller_test.rb | 2 + .../controllers/groups_controller_test.rb | 2 + api/test/controllers/memos_controller_test.rb | 2 + api/test/controllers/news_controller_test.rb | 2 + .../place_allow_lists_controller_test.rb | 2 + .../place_number_controller_test.rb | 2 + .../place_orders_controller_test.rb | 2 + .../power_orders_controller_test.rb | 2 + .../public_relations_controller_test.rb | 2 + .../purchase_lists_controller_test.rb | 2 + .../rentable_items_controller_test.rb | 2 + .../rental_orders_controller_test.rb | 2 + .../stage_common_options_controller_test.rb | 2 + .../stage_number_controller_test.rb | 2 + .../stage_orders_controller_test.rb | 2 + .../stocker_items_controller_test.rb | 2 + .../controllers/sub_reps_controller_test.rb | 2 + .../user_details_controller_test.rb | 2 + .../user_page_settings_controller_test.rb | 2 + .../controllers/venue_maps_controller_test.rb | 2 + api/test/models/announcement_test.rb | 2 + api/test/models/assign_group_place_test.rb | 2 + api/test/models/assign_rental_item_test.rb | 2 + api/test/models/assign_stage_test.rb | 2 + api/test/models/contact_person_test.rb | 2 + api/test/models/cooking_process_order_test.rb | 2 + api/test/models/current_stock_test.rb | 2 + api/test/models/department_test.rb | 2 + api/test/models/employee_test.rb | 2 + api/test/models/fes_date_test.rb | 2 + api/test/models/fes_year_test.rb | 2 + api/test/models/food_product_test.rb | 2 + api/test/models/grade_test.rb | 2 + api/test/models/group_category_test.rb | 2 + api/test/models/group_identification_test.rb | 2 + api/test/models/group_test.rb | 2 + api/test/models/item_adjustment_test.rb | 2 + api/test/models/memo_test.rb | 2 + api/test/models/news_test.rb | 2 + api/test/models/place_allow_list_test.rb | 2 + api/test/models/place_number_test.rb | 2 + api/test/models/place_order_test.rb | 2 + api/test/models/place_test.rb | 2 + api/test/models/power_order_test.rb | 2 + api/test/models/public_relation_test.rb | 2 + api/test/models/purchase_list_test.rb | 2 + api/test/models/rentable_item_test.rb | 2 + .../models/rental_item_allow_list_test.rb | 2 + api/test/models/rental_item_test.rb | 2 + api/test/models/rental_order_test.rb | 2 + api/test/models/role_test.rb | 2 + api/test/models/shop_test.rb | 2 + api/test/models/stage_common_option_test.rb | 2 + api/test/models/stage_number_test.rb | 2 + api/test/models/stage_order_test.rb | 2 + api/test/models/stage_test.rb | 2 + api/test/models/stocker_item_test.rb | 2 + api/test/models/stocker_place_test.rb | 2 + api/test/models/stool_test_test.rb | 2 + api/test/models/sub_rep_test.rb | 2 + api/test/models/user_detail_test.rb | 2 + api/test/models/user_page_setting_test.rb | 2 + api/test/models/venue_map_test.rb | 2 + api/test/test_helper.rb | 16 +- 405 files changed, 2968 insertions(+), 2051 deletions(-) diff --git a/api/Gemfile b/api/Gemfile index cf61e4d77..2f8f47865 100644 --- a/api/Gemfile +++ b/api/Gemfile @@ -1,3 +1,5 @@ +# frozen_string_literal: true + source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } diff --git a/api/Rakefile b/api/Rakefile index e85f91391..488c551fe 100644 --- a/api/Rakefile +++ b/api/Rakefile @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # Add your own tasks in files placed in lib/tasks ending in .rake, # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. diff --git a/api/app/channels/application_cable/channel.rb b/api/app/channels/application_cable/channel.rb index d67269728..9aec23053 100644 --- a/api/app/channels/application_cable/channel.rb +++ b/api/app/channels/application_cable/channel.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module ApplicationCable class Channel < ActionCable::Channel::Base end diff --git a/api/app/channels/application_cable/connection.rb b/api/app/channels/application_cable/connection.rb index 0ff5442f4..8d6c2a1bf 100644 --- a/api/app/channels/application_cable/connection.rb +++ b/api/app/channels/application_cable/connection.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module ApplicationCable class Connection < ActionCable::Connection::Base end diff --git a/api/app/controllers/announcements_controller.rb b/api/app/controllers/announcements_controller.rb index 64089f64f..d0e6777f2 100644 --- a/api/app/controllers/announcements_controller.rb +++ b/api/app/controllers/announcements_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AnnouncementsController < ApplicationController before_action :set_announcement, only: %i[show update destroy] @@ -25,14 +27,14 @@ def create # PATCH/PUT /announcements/1.json def update @announcement.update(announcement_params) - render json: fmt(created, @announcement, 'Updated announcement id = ' + params[:id]) + render json: fmt(created, @announcement, "Updated announcement id = #{params[:id]}") end # DELETE /announcements/1 # DELETE /announcements/1.json def destroy @announcement.destroy - render json: fmt(ok, [], 'Deleted announcement = ' + params[:id]) + render json: fmt(ok, [], "Deleted announcement = #{params[:id]}") end private @@ -42,7 +44,7 @@ def set_announcement if Announcement.exists?(params[:id]) @announcement = Announcement.find(params[:id]) else - render json: fmt(not_found, [], 'Not found announcement = ' + params[:id]) + render json: fmt(not_found, [], "Not found announcement = #{params[:id]}") end end diff --git a/api/app/controllers/api/auth/registrations_controller.rb b/api/app/controllers/api/auth/registrations_controller.rb index 8d9bfe429..24444ee57 100644 --- a/api/app/controllers/api/auth/registrations_controller.rb +++ b/api/app/controllers/api/auth/registrations_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Api module Auth class RegistrationsController < DeviseTokenAuth::RegistrationsController diff --git a/api/app/controllers/api/auth/sessions_controller.rb b/api/app/controllers/api/auth/sessions_controller.rb index 7fe41c368..3406139a2 100644 --- a/api/app/controllers/api/auth/sessions_controller.rb +++ b/api/app/controllers/api/auth/sessions_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # ログイン状態確認用コントローラー module Api module Auth diff --git a/api/app/controllers/api/v1/announcements_api_controller.rb b/api/app/controllers/api/v1/announcements_api_controller.rb index 58a3b10f1..9f9122e09 100644 --- a/api/app/controllers/api/v1/announcements_api_controller.rb +++ b/api/app/controllers/api/v1/announcements_api_controller.rb @@ -1,65 +1,71 @@ -class Api::V1::AnnouncementsApiController < ApplicationController - def get_announcement_index_for_admin_view - @announcements = Announcement.with_groups - render json: fmt(ok, @announcements) - end +# frozen_string_literal: true - def get_announcement_show_for_admin_view - @announcement = Announcement.with_group(params[:id]) - render json: fmt(ok, @announcement) - end +module Api + module V1 + class AnnouncementsApiController < ApplicationController + def get_announcement_index_for_admin_view + @announcements = Announcement.with_groups + render json: fmt(ok, @announcements) + end - def fit_announcement_index_for_admin_view(announcements) - announcements.map do |announcement| - { - "announcement": announcement, - "group": announcement.group - } - end - end + def get_announcement_show_for_admin_view + @announcement = Announcement.with_group(params[:id]) + render json: fmt(ok, @announcement) + end - def get_announcement_for_admin_view - @groups = Group.with_announcement(params[:id]) - render json: fmt(ok, @groups) - end + def fit_announcement_index_for_admin_view(announcements) + announcements.map do |announcement| + { + "announcement": announcement, + "group": announcement.group + } + end + end - # admin_viewのannouncement/indexの形に整える - def fit_group_index_for_admin_view(groups) - groups.map do |group| - { - "group": group, - "group_category": group.group_category, - "fes_year": group.fes_year - } - end - end + def get_announcement_for_admin_view + @groups = Group.with_announcement(params[:id]) + render json: fmt(ok, @groups) + end - # 絞り込み機能 - def get_refinement_announcements - fes_year_id = params[:fes_year_id].to_i - # 両方ともALL - if fes_year_id == 0 - @groups = Group.with_announcements - # fes_year_idだけ指定 - elsif fes_year_id != 0 - @groups = Group.with_announcement_narrow_down_by_fes_year(fes_year_id) - end + # admin_viewのannouncement/indexの形に整える + def fit_group_index_for_admin_view(groups) + groups.map do |group| + { + "group": group, + "group_category": group.group_category, + "fes_year": group.fes_year + } + end + end - if @groups.count == 0 - render json: fmt(not_found, [], 'Not found groups') - else - render json: fmt(ok, @groups) - end - end + # 絞り込み機能 + def get_refinement_announcements + fes_year_id = params[:fes_year_id].to_i + # 両方ともALL + if fes_year_id.zero? + @groups = Group.with_announcements + # fes_year_idだけ指定 + elsif fes_year_id != 0 + @groups = Group.with_announcement_narrow_down_by_fes_year(fes_year_id) + end + + if @groups.count.zero? + render json: fmt(not_found, [], 'Not found groups') + else + render json: fmt(ok, @groups) + end + end - # あいまい検索機能 - def get_search_announcements - word = params[:word] - @groups = Group.with_announcement_narrow_down_by_search_word(word) - if @groups.count == 0 - render json: fmt(not_found, [], 'Not found groups') - else - render json: fmt(ok, @groups) + # あいまい検索機能 + def get_search_announcements + word = params[:word] + @groups = Group.with_announcement_narrow_down_by_search_word(word) + if @groups.count.zero? + render json: fmt(not_found, [], 'Not found groups') + else + render json: fmt(ok, @groups) + end + end end end end diff --git a/api/app/controllers/api/v1/assign_rental_items_api_controller.rb b/api/app/controllers/api/v1/assign_rental_items_api_controller.rb index a476651fa..1ed681306 100644 --- a/api/app/controllers/api/v1/assign_rental_items_api_controller.rb +++ b/api/app/controllers/api/v1/assign_rental_items_api_controller.rb @@ -1,79 +1,85 @@ -class Api::V1::AssignRentalItemsApiController < ApplicationController - # 在庫物品 stocker_items - def get_stocker_item_index_for_admin_view - @stocker_items = StockerItem.with_rental_items - render json: fmt(ok, @stocker_items) - end +# frozen_string_literal: true - def get_stocker_item_show_for_admin_view - @stocker_item = StockerItem.with_rental_item(params[:id]) - render json: fmt(ok, @stocker_item) - end +module Api + module V1 + class AssignRentalItemsApiController < ApplicationController + # 在庫物品 stocker_items + def get_stocker_item_index_for_admin_view + @stocker_items = StockerItem.with_rental_items + render json: fmt(ok, @stocker_items) + end - def fit_stocker_item_index_for_admin_view(stocker_items) - stocker_items.map do |stocker_item| - { - "stocker_item": stocker_item, - "rental_item": stocker_item.rental_item - } - end - end + def get_stocker_item_show_for_admin_view + @stocker_item = StockerItem.with_rental_item(params[:id]) + render json: fmt(ok, @stocker_item) + end - # 在庫物品絞り込み - def get_refinement_stocker_item - stocker_place_id = params[:stocker_place_id].to_i - @stocker_items = if stocker_place_id == 0 - StockerItem.all - else - StockerItem.where(stocker_place_id: stocker_place_id) - end + def fit_stocker_item_index_for_admin_view(stocker_items) + stocker_items.map do |stocker_item| + { + "stocker_item": stocker_item, + "rental_item": stocker_item.rental_item + } + end + end - @stocker_place = StockerPlace.find(params[:stocker_place_id]) + # 在庫物品絞り込み + def get_refinement_stocker_item + stocker_place_id = params[:stocker_place_id].to_i + @stocker_items = if stocker_place_id.zero? + StockerItem.all + else + StockerItem.where(stocker_place_id: stocker_place_id) + end - if @stocker_items.count == 0 - render json: fmt(not_found, { "stocker_place": @stocker_place, "stocker_items": [] }, - 'Not found stocker_items') - else - render json: fmt(ok, - { "stocker_place": @stocker_place, - "stocker_items": fit_stocker_item_index_for_admin_view(@stocker_items) }) - end - end + @stocker_place = StockerPlace.find(params[:stocker_place_id]) - # 割当状況 assign_rental_items - def get_assign_rental_item_index_for_admin_view - @assign_rental_items = AssignRentalItem.with_groups_and_rental_item - render json: fmt(ok, @assign_rental_items) - end + if @stocker_items.count.zero? + render json: fmt(not_found, { "stocker_place": @stocker_place, "stocker_items": [] }, + 'Not found stocker_items') + else + render json: fmt(ok, + { "stocker_place": @stocker_place, + "stocker_items": fit_stocker_item_index_for_admin_view(@stocker_items) }) + end + end - def get_assign_rental_item_show_for_admin_view - @assign_rental_item = AssignRentalItem.with_rental_item(params[:id]) - render json: fmt(ok, @assign_rental_item) - end + # 割当状況 assign_rental_items + def get_assign_rental_item_index_for_admin_view + @assign_rental_items = AssignRentalItem.with_groups_and_rental_item + render json: fmt(ok, @assign_rental_items) + end - def fit_assign_rental_item_index_for_admin_view(assign_rental_items) - assign_rental_items.map do |assign_rental_item| - { - "assign_rental_item": assign_rental_item, - "rental_item": assign_rental_item.rental_item, - "group": assign_rental_item.group - } - end - end + def get_assign_rental_item_show_for_admin_view + @assign_rental_item = AssignRentalItem.with_rental_item(params[:id]) + render json: fmt(ok, @assign_rental_item) + end + + def fit_assign_rental_item_index_for_admin_view(assign_rental_items) + assign_rental_items.map do |assign_rental_item| + { + "assign_rental_item": assign_rental_item, + "rental_item": assign_rental_item.rental_item, + "group": assign_rental_item.group + } + end + end - # 割当状況絞り込み - def get_refinement_assign_rental_item - stocker_place_id = params[:stocker_place_id].to_i - @assign_rental_items = if stocker_place_id == 0 - AssignRentalItem.all - else - AssignRentalItem.where(stocker_place_id: stocker_place_id) - end + # 割当状況絞り込み + def get_refinement_assign_rental_item + stocker_place_id = params[:stocker_place_id].to_i + @assign_rental_items = if stocker_place_id.zero? + AssignRentalItem.all + else + AssignRentalItem.where(stocker_place_id: stocker_place_id) + end - if @assign_rental_items.count == 0 - render json: fmt(not_found, [], 'Not found assign_rental_items') - else - render json: fmt(ok, fit_assign_rental_item_index_for_admin_view(@assign_rental_items)) + if @assign_rental_items.count.zero? + render json: fmt(not_found, [], 'Not found assign_rental_items') + else + render json: fmt(ok, fit_assign_rental_item_index_for_admin_view(@assign_rental_items)) + end + end end end end diff --git a/api/app/controllers/api/v1/cooking_process_orders_api_controller.rb b/api/app/controllers/api/v1/cooking_process_orders_api_controller.rb index 840cb38b2..ca1e381ce 100644 --- a/api/app/controllers/api/v1/cooking_process_orders_api_controller.rb +++ b/api/app/controllers/api/v1/cooking_process_orders_api_controller.rb @@ -1,35 +1,41 @@ -class Api::V1::CookingProcessOrdersApiController < ApplicationController - def get_cooking_process_order_for_admin_view - @groups = Group.with_cooking_process_order(params[:id]) - render json: fmt(ok, @groups) - end +# frozen_string_literal: true - # 絞り込み機能 - def get_refinement_cooking_process_orders - fes_year_id = params[:fes_year_id].to_i - # 両方ともALL - if fes_year_id == 0 - @groups = Group.with_cooking_process_orders - # fes_year_idだけ指定 - elsif fes_year_id != 0 - @groups = Group.with_cooking_process_order_narrow_down_by_fes_year(fes_year_id) - end +module Api + module V1 + class CookingProcessOrdersApiController < ApplicationController + def get_cooking_process_order_for_admin_view + @groups = Group.with_cooking_process_order(params[:id]) + render json: fmt(ok, @groups) + end - if @groups.count == 0 - render json: fmt(not_found, [], 'Not found groups') - else - render json: fmt(ok, @groups) - end - end + # 絞り込み機能 + def get_refinement_cooking_process_orders + fes_year_id = params[:fes_year_id].to_i + # 両方ともALL + if fes_year_id.zero? + @groups = Group.with_cooking_process_orders + # fes_year_idだけ指定 + elsif fes_year_id != 0 + @groups = Group.with_cooking_process_order_narrow_down_by_fes_year(fes_year_id) + end + + if @groups.count.zero? + render json: fmt(not_found, [], 'Not found groups') + else + render json: fmt(ok, @groups) + end + end - # あいまい検索機能 - def get_search_cooking_process_orders - word = params[:word] - @groups = Group.with_cooking_process_order_narrow_down_by_search_word(word) - if @groups.count == 0 - render json: fmt(not_found, [], 'Not found groups') - else - render json: fmt(ok, @groups) + # あいまい検索機能 + def get_search_cooking_process_orders + word = params[:word] + @groups = Group.with_cooking_process_order_narrow_down_by_search_word(word) + if @groups.count.zero? + render json: fmt(not_found, [], 'Not found groups') + else + render json: fmt(ok, @groups) + end + end end end end diff --git a/api/app/controllers/api/v1/current_user_api_controller.rb b/api/app/controllers/api/v1/current_user_api_controller.rb index ac2bbf93a..40b3a3707 100644 --- a/api/app/controllers/api/v1/current_user_api_controller.rb +++ b/api/app/controllers/api/v1/current_user_api_controller.rb @@ -1,55 +1,61 @@ -class Api::V1::CurrentUserApiController < ApplicationController - # before_action :authenticate_api_user! - - # ログインユーザーの登録情報を全て取得する - def current_regist_info - @user = current_api_user - @groups = @user.with_regist_info - render json: fmt(ok, @groups) - end - - def password_reset - @user = current_api_user - @user.password = password_reset_params[:password] - @user.password_confirmation = password_reset_params[:password_confirmation] - @user.save! - end - - def get_current_user_with_user_detail - @user = current_api_user - @user_detail = @user.with_user_detail - render json: fmt(ok, @user_detail) - end - - def edit_user_info - @user = current_api_user - @user_detail = @user.user_detail - @user.name = edit_user_info_params[:name] - @user.email = edit_user_info_params[:email] - @user_detail.student_id = edit_user_info_params[:student_id] - @user_detail.tel = edit_user_info_params[:tel] - @user_detail.department_id = edit_user_info_params[:department_id] - @user_detail.grade_id = edit_user_info_params[:grade_id] - @user.save! - @user_detail.save! - end - - def is_login - @user = current_api_user - if @user - render json: true - else - render json: false +# frozen_string_literal: true + +module Api + module V1 + class CurrentUserApiController < ApplicationController + # before_action :authenticate_api_user! + + # ログインユーザーの登録情報を全て取得する + def current_regist_info + @user = current_api_user + @groups = @user.with_regist_info + render json: fmt(ok, @groups) + end + + def password_reset + @user = current_api_user + @user.password = password_reset_params[:password] + @user.password_confirmation = password_reset_params[:password_confirmation] + @user.save! + end + + def get_current_user_with_user_detail + @user = current_api_user + @user_detail = @user.with_user_detail + render json: fmt(ok, @user_detail) + end + + def edit_user_info + @user = current_api_user + @user_detail = @user.user_detail + @user.name = edit_user_info_params[:name] + @user.email = edit_user_info_params[:email] + @user_detail.student_id = edit_user_info_params[:student_id] + @user_detail.tel = edit_user_info_params[:tel] + @user_detail.department_id = edit_user_info_params[:department_id] + @user_detail.grade_id = edit_user_info_params[:grade_id] + @user.save! + @user_detail.save! + end + + def is_login + @user = current_api_user + if @user + render json: true + else + render json: false + end + end + + private + + def edit_user_info_params + params.permit(:name, :email, :student_id, :tel, :department_id, :grade_id) + end + + def password_reset_params + params.permit(:password, :password_confirmation) + end end end - - private - - def edit_user_info_params - params.permit(:name, :email, :student_id, :tel, :department_id, :grade_id) - end - - def password_reset_params - params.permit(:password, :password_confirmation) - end end diff --git a/api/app/controllers/api/v1/dashboard_api_controller.rb b/api/app/controllers/api/v1/dashboard_api_controller.rb index f40dba0b1..e1c8ce45a 100644 --- a/api/app/controllers/api/v1/dashboard_api_controller.rb +++ b/api/app/controllers/api/v1/dashboard_api_controller.rb @@ -1,53 +1,59 @@ -class Api::V1::DashboardApiController < ApplicationController - def get_dashboard_info - # ユーザー数 - all_user_num = User.all.length - developer_num = User.where(role_id: 1).length - manager_num = User.where(role_id: 2).length - staff_num = User.where(role_id: 3).length - user_num = User.where(role_id: 4).length - groups = Group.all - groups_length = groups.length - cate_1_length = groups.where(group_category: 1).length - cate_2_length = groups.where(group_category: 2).length - cate_3_length = groups.where(group_category: 3).length - cate_4_length = groups.where(group_category: 4).length - cate_5_length = groups.where(group_category: 5).length - cate_6_length = groups.where(group_category: 6).length - all_length = StockerPlace.all.length - stock_item_status_1 = StockerPlace.where(stock_item_status: 1).length - stock_item_status_2 = StockerPlace.where(stock_item_status: 2).length - stock_item_status_3 = StockerPlace.where(stock_item_status: 3).length - progress_stock_item_1 = (stock_item_status_1 * 100) / all_length - progress_stock_item_2 = (stock_item_status_2 * 100) / all_length - progress_stock_item_3 = (stock_item_status_3 * 100) / all_length - assign_item_status_1 = StockerPlace.where(assign_item_status: 1).length - assign_item_status_2 = StockerPlace.where(assign_item_status: 2).length - assign_item_status_3 = StockerPlace.where(assign_item_status: 3).length - progress_assign_item_1 = (assign_item_status_1 * 100) / all_length - progress_assign_item_2 = (assign_item_status_2 * 100) / all_length - progress_assign_item_3 = (assign_item_status_3 * 100) / all_length - group_data = { - all_user_num: all_user_num, - developer_num: developer_num, - manager_num: manager_num, - staff_num: staff_num, - user_num: user_num, - groups_length: groups_length, - cate_1_length: cate_1_length, - cate_2_length: cate_2_length, - cate_3_length: cate_3_length, - cate_4_length: cate_4_length, - cate_5_length: cate_5_length, - cate_6_length: cate_6_length, - progress_stock_item_1: progress_stock_item_1, - progress_stock_item_2: progress_stock_item_2, - progress_stock_item_3: progress_stock_item_3, - progress_assign_item_1: progress_assign_item_1, - progress_assign_item_2: progress_assign_item_2, - progress_assign_item_3: progress_assign_item_3 - } +# frozen_string_literal: true - render json: group_data +module Api + module V1 + class DashboardApiController < ApplicationController + def get_dashboard_info + # ユーザー数 + all_user_num = User.all.length + developer_num = User.where(role_id: 1).length + manager_num = User.where(role_id: 2).length + staff_num = User.where(role_id: 3).length + user_num = User.where(role_id: 4).length + groups = Group.all + groups_length = groups.length + cate_1_length = groups.where(group_category: 1).length + cate_2_length = groups.where(group_category: 2).length + cate_3_length = groups.where(group_category: 3).length + cate_4_length = groups.where(group_category: 4).length + cate_5_length = groups.where(group_category: 5).length + cate_6_length = groups.where(group_category: 6).length + all_length = StockerPlace.all.length + stock_item_status_1 = StockerPlace.where(stock_item_status: 1).length + stock_item_status_2 = StockerPlace.where(stock_item_status: 2).length + stock_item_status_3 = StockerPlace.where(stock_item_status: 3).length + progress_stock_item_1 = (stock_item_status_1 * 100) / all_length + progress_stock_item_2 = (stock_item_status_2 * 100) / all_length + progress_stock_item_3 = (stock_item_status_3 * 100) / all_length + assign_item_status_1 = StockerPlace.where(assign_item_status: 1).length + assign_item_status_2 = StockerPlace.where(assign_item_status: 2).length + assign_item_status_3 = StockerPlace.where(assign_item_status: 3).length + progress_assign_item_1 = (assign_item_status_1 * 100) / all_length + progress_assign_item_2 = (assign_item_status_2 * 100) / all_length + progress_assign_item_3 = (assign_item_status_3 * 100) / all_length + group_data = { + all_user_num: all_user_num, + developer_num: developer_num, + manager_num: manager_num, + staff_num: staff_num, + user_num: user_num, + groups_length: groups_length, + cate_1_length: cate_1_length, + cate_2_length: cate_2_length, + cate_3_length: cate_3_length, + cate_4_length: cate_4_length, + cate_5_length: cate_5_length, + cate_6_length: cate_6_length, + progress_stock_item_1: progress_stock_item_1, + progress_stock_item_2: progress_stock_item_2, + progress_stock_item_3: progress_stock_item_3, + progress_assign_item_1: progress_assign_item_1, + progress_assign_item_2: progress_assign_item_2, + progress_assign_item_3: progress_assign_item_3 + } + + render json: group_data + end + end end end diff --git a/api/app/controllers/api/v1/employees_api_controller.rb b/api/app/controllers/api/v1/employees_api_controller.rb index 7503c890f..7da748a27 100644 --- a/api/app/controllers/api/v1/employees_api_controller.rb +++ b/api/app/controllers/api/v1/employees_api_controller.rb @@ -1,54 +1,60 @@ -class Api::V1::EmployeesApiController < ApplicationController - def get_employee_index_for_admin_view - @employees = Employee.with_groups - render json: fmt(ok, @employees) - end +# frozen_string_literal: true - def get_employee_show_for_admin_view - @employee = Employee.with_group(params[:id]) - render json: fmt(ok, @employee) - end +module Api + module V1 + class EmployeesApiController < ApplicationController + def get_employee_index_for_admin_view + @employees = Employee.with_groups + render json: fmt(ok, @employees) + end - def fit_employee_index_for_admin_view(employees) - employees.map do |employee| - { - "employee": employee, - "group": employee.group, - "stool_test": employee.stool_test - } - end - end + def get_employee_show_for_admin_view + @employee = Employee.with_group(params[:id]) + render json: fmt(ok, @employee) + end - # 絞り込み機能 - def get_refinement_employees - fes_year_id = params[:fes_year_id].to_i - # 指定なし - @employees = if fes_year_id == 0 - Employee.all - # fes_year_id指定 - else - Employee.preload(:group).map do |employee| - employee if employee.group.fes_year_id == fes_year_id - end.compact - end + def fit_employee_index_for_admin_view(employees) + employees.map do |employee| + { + "employee": employee, + "group": employee.group, + "stool_test": employee.stool_test + } + end + end - if @employees.count == 0 - render json: fmt(not_found, [], 'Not found empolees') - else - render json: fmt(ok, fit_employee_index_for_admin_view(@employees)) - end - end + # 絞り込み機能 + def get_refinement_employees + fes_year_id = params[:fes_year_id].to_i + # 指定なし + @employees = if fes_year_id.zero? + Employee.all + # fes_year_id指定 + else + Employee.preload(:group).map do |employee| + employee if employee.group.fes_year_id == fes_year_id + end.compact + end + + if @employees.count.zero? + render json: fmt(not_found, [], 'Not found empolees') + else + render json: fmt(ok, fit_employee_index_for_admin_view(@employees)) + end + end - # あいまい検索 - def get_search_employees - word = params[:word] - @employees = Employee.all.map do |employee| - employee if employee.group.name.include?(word) || employee.name.include?(word) - end.compact - if @employees.count == 0 - render json: fmt(not_found, [], 'Not found employees') - else - render json: fmt(ok, fit_employee_index_for_admin_view(@employees)) + # あいまい検索 + def get_search_employees + word = params[:word] + @employees = Employee.all.map do |employee| + employee if employee.group.name.include?(word) || employee.name.include?(word) + end.compact + if @employees.count.zero? + render json: fmt(not_found, [], 'Not found employees') + else + render json: fmt(ok, fit_employee_index_for_admin_view(@employees)) + end + end end end end diff --git a/api/app/controllers/api/v1/fes_dates_api_controller.rb b/api/app/controllers/api/v1/fes_dates_api_controller.rb index f6adafb97..2eefae2ff 100644 --- a/api/app/controllers/api/v1/fes_dates_api_controller.rb +++ b/api/app/controllers/api/v1/fes_dates_api_controller.rb @@ -1,18 +1,24 @@ -class Api::V1::FesDatesApiController < ApplicationController - def get_refinement_fes_date_by_fes_year - fes_year_id = params[:fes_year_id] - @fes_dates = FesDate.where(fes_year_id: fes_year_id) +# frozen_string_literal: true - if @fes_dates.count == 0 - render json: fmt(not_found, @fes_dates) - else - render json: fmt(ok, @fes_dates) - end - end +module Api + module V1 + class FesDatesApiController < ApplicationController + def get_refinement_fes_date_by_fes_year + fes_year_id = params[:fes_year_id] + @fes_dates = FesDate.where(fes_year_id: fes_year_id) - def get_current_fes_dates - current_fes_year_id = UserPageSetting.find(1).fes_year_id - @fes_dates = FesDate.where(fes_year_id: current_fes_year_id) - render json: fmt(ok, @fes_dates) + if @fes_dates.count.zero? + render json: fmt(not_found, @fes_dates) + else + render json: fmt(ok, @fes_dates) + end + end + + def get_current_fes_dates + current_fes_year_id = UserPageSetting.find(1).fes_year_id + @fes_dates = FesDate.where(fes_year_id: current_fes_year_id) + render json: fmt(ok, @fes_dates) + end + end end end diff --git a/api/app/controllers/api/v1/food_products_api_controller.rb b/api/app/controllers/api/v1/food_products_api_controller.rb index 99756439a..ecf879022 100644 --- a/api/app/controllers/api/v1/food_products_api_controller.rb +++ b/api/app/controllers/api/v1/food_products_api_controller.rb @@ -1,113 +1,119 @@ -class Api::V1::FoodProductsApiController < ApplicationController - def get_food_product_index_for_admin_view - @food_products = FoodProduct.with_groups - render json: fmt(ok, @food_products) - end +# frozen_string_literal: true - def get_food_product_show_for_admin_view - @food_product = FoodProduct.with_group(params[:id]) - render json: fmt(ok, @food_product) - end +module Api + module V1 + class FoodProductsApiController < ApplicationController + def get_food_product_index_for_admin_view + @food_products = FoodProduct.with_groups + render json: fmt(ok, @food_products) + end - # admin_pageのviewの形に整える - def fit_food_product_index_for_admin_view(food_products) - food_products.map do |food_product| - { - "food_product": food_product, - "group": food_product.group - } - end - end + def get_food_product_show_for_admin_view + @food_product = FoodProduct.with_group(params[:id]) + render json: fmt(ok, @food_product) + end - # 絞り込み機能 - def get_refinement_food_products - fes_year_id = params[:fes_year_id].to_i - is_cooking = params[:is_cooking].to_i - is_cooking_list = [nil, true, false] - category_id = params[:category_id].to_i - search_word = params[:word] - # is_cooking - # 0: 指定なし(ALL), 1: 調理あり(true), 2: 調理なし(false) - # category_id - # 0: 指定なし(ALL), 1: 食品販売, 2: 物品販売 - # word あるかないか - # 全部ALL - if fes_year_id == 0 && is_cooking == 0 && category_id == 0 - @food_products = FoodProduct.all - # fes_year_idだけ指定 - elsif fes_year_id != 0 && is_cooking == 0 && category_id == 0 - @food_products = FoodProduct.preload(:group).map do |food_product| - food_product if food_product.group.fes_year_id == fes_year_id - end.compact - # is_cookingだけ指定 - elsif fes_year_id == 0 && is_cooking != 0 && category_id == 0 - @food_products = FoodProduct.where(is_cooking: is_cooking_list[is_cooking]) - # category_idだけ指定 - elsif fes_year_id == 0 && is_cooking == 0 && category_id != 0 - @food_products = FoodProduct.preload(:group).map do |food_product| - food_product if food_product.group.group_category_id == category_id - end.compact - # fes_year_idとis_cookingの指定 - elsif fes_year_id != 0 && is_cooking != 0 && category_id == 0 - @food_products = FoodProduct.where(is_cooking: is_cooking_list[is_cooking]).map do |food_product| - food_product if food_product.group.fes_year_id == fes_year_id - end.compact - # fes_year_idとcategory_idの指定 - elsif fes_year_id != 0 && is_cooking == 0 && category_id != 0 - @food_products = FoodProduct.preload(:group).map do |food_product| - if food_product.group.fes_year_id == fes_year_id && food_product.group.group_category_id == category_id - food_product + # admin_pageのviewの形に整える + def fit_food_product_index_for_admin_view(food_products) + food_products.map do |food_product| + { + "food_product": food_product, + "group": food_product.group + } end - end.compact - # is_cookingとcategory_idの指定 - elsif fes_year_id == 0 && is_cooking != 0 && category_id != 0 - @food_products = FoodProduct.where(is_cooking: is_cooking_list[is_cooking]).map do |food_product| - food_product if food_product.group.group_category_id == category_id - end.compact - # 全部指定 - else - @food_products = FoodProduct.where(is_cooking: is_cooking_list[is_cooking]).map do |food_product| - if food_product.group.fes_year_id == fes_year_id && food_product.group.group_category_id == category_id - food_product + end + + # 絞り込み機能 + def get_refinement_food_products + fes_year_id = params[:fes_year_id].to_i + is_cooking = params[:is_cooking].to_i + is_cooking_list = [nil, true, false] + category_id = params[:category_id].to_i + search_word = params[:word] + # is_cooking + # 0: 指定なし(ALL), 1: 調理あり(true), 2: 調理なし(false) + # category_id + # 0: 指定なし(ALL), 1: 食品販売, 2: 物品販売 + # word あるかないか + # 全部ALL + if fes_year_id.zero? && is_cooking.zero? && category_id.zero? + @food_products = FoodProduct.all + # fes_year_idだけ指定 + elsif fes_year_id != 0 && is_cooking.zero? && category_id.zero? + @food_products = FoodProduct.preload(:group).map do |food_product| + food_product if food_product.group.fes_year_id == fes_year_id + end.compact + # is_cookingだけ指定 + elsif fes_year_id.zero? && is_cooking != 0 && category_id.zero? + @food_products = FoodProduct.where(is_cooking: is_cooking_list[is_cooking]) + # category_idだけ指定 + elsif fes_year_id.zero? && is_cooking.zero? && category_id != 0 + @food_products = FoodProduct.preload(:group).map do |food_product| + food_product if food_product.group.group_category_id == category_id + end.compact + # fes_year_idとis_cookingの指定 + elsif fes_year_id != 0 && is_cooking != 0 && category_id.zero? + @food_products = FoodProduct.where(is_cooking: is_cooking_list[is_cooking]).map do |food_product| + food_product if food_product.group.fes_year_id == fes_year_id + end.compact + # fes_year_idとcategory_idの指定 + elsif fes_year_id != 0 && is_cooking.zero? && category_id != 0 + @food_products = FoodProduct.preload(:group).map do |food_product| + if food_product.group.fes_year_id == fes_year_id && food_product.group.group_category_id == category_id + food_product + end + end.compact + # is_cookingとcategory_idの指定 + elsif fes_year_id.zero? && is_cooking != 0 && category_id != 0 + @food_products = FoodProduct.where(is_cooking: is_cooking_list[is_cooking]).map do |food_product| + food_product if food_product.group.group_category_id == category_id + end.compact + # 全部指定 + else + @food_products = FoodProduct.where(is_cooking: is_cooking_list[is_cooking]).map do |food_product| + if food_product.group.fes_year_id == fes_year_id && food_product.group.group_category_id == category_id + food_product + end + end.compact end - end.compact - end - if search_word.present? - # 文字列検索 - @food_products = @food_products.map do |food_product| - food_product if food_product.group.name.include?(search_word) || food_product.name.include?(search_word) - end.compact - end + if search_word.present? + # 文字列検索 + @food_products = @food_products.map do |food_product| + food_product if food_product.group.name.include?(search_word) || food_product.name.include?(search_word) + end.compact + end - if @food_products.count == 0 - render json: fmt(not_found, [], 'Not found food_products') - else - render json: fmt(ok, fit_food_product_index_for_admin_view(@food_products)) - end - end + if @food_products.count.zero? + render json: fmt(not_found, [], 'Not found food_products') + else + render json: fmt(ok, fit_food_product_index_for_admin_view(@food_products)) + end + end - # あいまい検索 - def get_search_food_products - word = params[:word] - @food_products = FoodProduct.all.map do |food_product| - food_product if food_product.group.name.include?(word) || food_product.name.include?(word) - end.compact - if @food_products.count == 0 - render json: fmt(not_found, [], 'Not found food_products') - else - render json: fmt(ok, fit_food_product_index_for_admin_view(@food_products)) - end - end + # あいまい検索 + def get_search_food_products + word = params[:word] + @food_products = FoodProduct.all.map do |food_product| + food_product if food_product.group.name.include?(word) || food_product.name.include?(word) + end.compact + if @food_products.count.zero? + render json: fmt(not_found, [], 'Not found food_products') + else + render json: fmt(ok, fit_food_product_index_for_admin_view(@food_products)) + end + end - # group_idに紐づいたfood_productsの取得 - def get_food_products_by_group_id - group_id = params[:group_id] - @food_products = FoodProduct.where(group_id: group_id) - if @food_products.count == 0 - render json: fmt(not_found, [], 'Not found food_products') - else - render json: fmt(ok, @food_products) + # group_idに紐づいたfood_productsの取得 + def get_food_products_by_group_id + group_id = params[:group_id] + @food_products = FoodProduct.where(group_id: group_id) + if @food_products.count.zero? + render json: fmt(not_found, [], 'Not found food_products') + else + render json: fmt(ok, @food_products) + end + end end end end diff --git a/api/app/controllers/api/v1/groups_api_controller.rb b/api/app/controllers/api/v1/groups_api_controller.rb index 3391766c9..b61cf64a3 100644 --- a/api/app/controllers/api/v1/groups_api_controller.rb +++ b/api/app/controllers/api/v1/groups_api_controller.rb @@ -1,96 +1,102 @@ -class Api::V1::GroupsApiController < ApplicationController - def get_group_index_for_admin_view - @groups = Group.with_group_categories_and_fes_years - render json: fmt(ok, @groups) - end +# frozen_string_literal: true - def get_group_for_admin_view - @groups = Group.with_group_category_and_fes_year(params[:id]) - render json: fmt(ok, @groups) - end +module Api + module V1 + class GroupsApiController < ApplicationController + def get_group_index_for_admin_view + @groups = Group.with_group_categories_and_fes_years + render json: fmt(ok, @groups) + end - def get_group_show_for_admin_view - @groups = Group.with_order_info(params[:id]) - render json: fmt(ok, @groups) - end + def get_group_for_admin_view + @groups = Group.with_group_category_and_fes_year(params[:id]) + render json: fmt(ok, @groups) + end - def get_groups_have_no_public_relation - @current_fes_year = UserPageSetting.first.fes_year - @groups = Group.have_no_public_relation(@current_fes_year.id) - render json: fmt(ok, @groups) - end + def get_group_show_for_admin_view + @groups = Group.with_order_info(params[:id]) + render json: fmt(ok, @groups) + end - def get_groups_have_no_announcement - @current_fes_year = UserPageSetting.first.fes_year - @groups = Group.have_no_announcement(@current_fes_year.id) - render json: fmt(ok, @groups) - end + def get_groups_have_no_public_relation + @current_fes_year = UserPageSetting.first.fes_year + @groups = Group.have_no_public_relation(@current_fes_year.id) + render json: fmt(ok, @groups) + end - def get_groups_have_no_cooking_process_order - @current_fes_year = UserPageSetting.first.fes_year - @groups = Group.have_no_cooking_process_order(@current_fes_year.id) - render json: fmt(ok, @groups) - end + def get_groups_have_no_announcement + @current_fes_year = UserPageSetting.first.fes_year + @groups = Group.have_no_announcement(@current_fes_year.id) + render json: fmt(ok, @groups) + end - def get_groups_have_no_venue_map - @current_fes_year = UserPageSetting.first.fes_year - @groups = Group.have_no_venue_map(@current_fes_year.id) - render json: fmt(ok, @groups) - end + def get_groups_have_no_cooking_process_order + @current_fes_year = UserPageSetting.first.fes_year + @groups = Group.have_no_cooking_process_order(@current_fes_year.id) + render json: fmt(ok, @groups) + end - # admin_pageのviewの形に整える - def fit_group_index_for_admin_view(groups) - groups.map do |group| - { - "group": group, - "group_category": group.group_category, - "fes_year": group.fes_year - } - end - end + def get_groups_have_no_venue_map + @current_fes_year = UserPageSetting.first.fes_year + @groups = Group.have_no_venue_map(@current_fes_year.id) + render json: fmt(ok, @groups) + end - # fes_yearによる絞り込み - def get_groups_refinemented_by_current_fes_year - @current_fes_year = UserPageSetting.first.fes_year - @group = Group.where(fes_year_id: @current_fes_year.id) - render json: fmt(ok, @group) - end + # admin_pageのviewの形に整える + def fit_group_index_for_admin_view(groups) + groups.map do |group| + { + "group": group, + "group_category": group.group_category, + "fes_year": group.fes_year + } + end + end - # 絞り込み機能 - def get_refinement_groups - fes_year_id = params[:fes_year_id].to_i - group_category_id = params[:group_category_id].to_i - committee = params[:committee].to_i - is_international = params[:is_international].to_i - is_external = params[:is_external].to_i # 0: 指定なし(ALL) 1: true 2: false + # fes_yearによる絞り込み + def get_groups_refinemented_by_current_fes_year + @current_fes_year = UserPageSetting.first.fes_year + @group = Group.where(fes_year_id: @current_fes_year.id) + render json: fmt(ok, @group) + end - @groups = Group.all - @groups = @groups.where(fes_year_id: fes_year_id) unless fes_year_id == 0 - @groups = @groups.where(group_category_id: group_category_id) unless group_category_id == 0 - @groups = @groups.where(committee: committee == 1) unless committee == 0 - @groups = @groups.where(is_international: is_international == 1) unless is_international == 0 - @groups = @groups.where(is_external: is_external == 1) unless is_external == 0 + # 絞り込み機能 + def get_refinement_groups + fes_year_id = params[:fes_year_id].to_i + group_category_id = params[:group_category_id].to_i + committee = params[:committee].to_i + is_international = params[:is_international].to_i + is_external = params[:is_external].to_i # 0: 指定なし(ALL) 1: true 2: false - if @groups.count == 0 - render json: fmt(not_found, [], 'Not found groups') - else - render json: fmt(ok, fit_group_index_for_admin_view(@groups)) - end - end + @groups = Group.all + @groups = @groups.where(fes_year_id: fes_year_id) unless fes_year_id.zero? + @groups = @groups.where(group_category_id: group_category_id) unless group_category_id.zero? + @groups = @groups.where(committee: committee == 1) unless committee.zero? + @groups = @groups.where(is_international: is_international == 1) unless is_international.zero? + @groups = @groups.where(is_external: is_external == 1) unless is_external.zero? + + if @groups.count.zero? + render json: fmt(not_found, [], 'Not found groups') + else + render json: fmt(ok, fit_group_index_for_admin_view(@groups)) + end + end - # あいまい検索機能 - def get_search_groups - word = params[:word] - groups_name = Group.where('name like ?', "%#{word}%") - groups_category = Group.where('group_category_id like ?', "%#{word}%") - project_name = Group.where('project_name like ?', "%#{word}%") + # あいまい検索機能 + def get_search_groups + word = params[:word] + groups_name = Group.where('name like ?', "%#{word}%") + groups_category = Group.where('group_category_id like ?', "%#{word}%") + project_name = Group.where('project_name like ?', "%#{word}%") - @groups = (groups_name + groups_category + project_name).uniq + @groups = (groups_name + groups_category + project_name).uniq - if @groups.count == 0 - render json: fmt(not_found, [], 'Not found groups') - else - render json: fmt(ok, fit_group_index_for_admin_view(@groups)) + if @groups.count.zero? + render json: fmt(not_found, [], 'Not found groups') + else + render json: fmt(ok, fit_group_index_for_admin_view(@groups)) + end + end end end end diff --git a/api/app/controllers/api/v1/order_infos_api_controller.rb b/api/app/controllers/api/v1/order_infos_api_controller.rb index 7f0865f6c..a57c709cd 100644 --- a/api/app/controllers/api/v1/order_infos_api_controller.rb +++ b/api/app/controllers/api/v1/order_infos_api_controller.rb @@ -1,35 +1,41 @@ -class Api::V1::OrderInfosApiController < ApplicationController - def get_order_info_for_admin_view - @groups = Group.with_order_info(params[:id]) - render json: fmt(ok, @groups) - end +# frozen_string_literal: true - # 絞り込み機能 - def get_refinement_order_infos - fes_year_id = params[:fes_year_id].to_i - # fes_yesrがALL - if fes_year_id == 0 - @groups = Group.with_order_infos - # fes_year_idが指定 - elsif fes_year_id != 0 - @groups = Group.with_order_info_narrow_down_by_fes_year(fes_year_id) - end +module Api + module V1 + class OrderInfosApiController < ApplicationController + def get_order_info_for_admin_view + @groups = Group.with_order_info(params[:id]) + render json: fmt(ok, @groups) + end - if @groups.count == 0 - render json: fmt(not_found, [], 'Not found groups') - else - render json: fmt(ok, @groups) - end - end + # 絞り込み機能 + def get_refinement_order_infos + fes_year_id = params[:fes_year_id].to_i + # fes_yesrがALL + if fes_year_id.zero? + @groups = Group.with_order_infos + # fes_year_idが指定 + elsif fes_year_id != 0 + @groups = Group.with_order_info_narrow_down_by_fes_year(fes_year_id) + end + + if @groups.count.zero? + render json: fmt(not_found, [], 'Not found groups') + else + render json: fmt(ok, @groups) + end + end - # あいまい検索機能 - def get_search_order_infos - word = params[:word] - @groups = Group.with_order_info_narrow_down_by_search_word(word) - if @groups.count == 0 - render json: fmt(not_found, [], 'Not found groups') - else - render json: fmt(ok, @groups) + # あいまい検索機能 + def get_search_order_infos + word = params[:word] + @groups = Group.with_order_info_narrow_down_by_search_word(word) + if @groups.count.zero? + render json: fmt(not_found, [], 'Not found groups') + else + render json: fmt(ok, @groups) + end + end end end end diff --git a/api/app/controllers/api/v1/order_status_check_api_controller.rb b/api/app/controllers/api/v1/order_status_check_api_controller.rb index f56a38ed6..9ba79bdfc 100644 --- a/api/app/controllers/api/v1/order_status_check_api_controller.rb +++ b/api/app/controllers/api/v1/order_status_check_api_controller.rb @@ -1,68 +1,74 @@ -class Api::V1::OrderStatusCheckApiController < ApplicationController - def get_order_status_check_for_admin_view - @groups = Group.with_order_status_check(params[:id]) - render json: fmt(ok, @groups) - end +# frozen_string_literal: true - # admin_pageのviewの形に整える - def fit_group_index_for_admin_view(groups) - groups.map do |group| - { - "group": group, - "user": group.user.nil? ? nil : group.user.id, - "group_category": group.group_category.nil? ? nil : group.group_category.id, - "fes_year": group.fes_year.nil? ? nil : group.fes_year.id, - "sub_rep": group.sub_rep.nil? ? nil : group.sub_rep.id, - "place_order": group.place_order.nil? ? nil : group.place_order.id, - "stage_orders": group.stage_orders.count == 0 ? nil : group.stage_orders[0].id, - "stage_common_option": group.stage_common_option.nil? ? nil : group.stage_common_option.id, - "power_orders": group.power_orders.count == 0 ? nil : group.power_orders[0].id, - "rental_orders": group.rental_orders.count == 0 ? nil : group.rental_orders[0].id, - "employees": group.employees.count == 0 ? nil : group.employees[0].id, - "food_product": group.food_products.empty? ? nil : true, - "purchase_list": if group.food_products.empty? - nil - elsif group.food_products.any? do |food_product| - !food_product.purchase_lists.empty? - end - true - end, - "public_relation": group.public_relation.nil? ? nil : group.public_relation.id, - "venue_map": group.venue_map.nil? ? nil : group.venue_map.id, - "announcement": group.announcement.nil? ? nil : group.announcement.status, - "cooking_process_order": group.cooking_process_order.nil? ? nil : group.cooking_process_order.id - } - end - end +module Api + module V1 + class OrderStatusCheckApiController < ApplicationController + def get_order_status_check_for_admin_view + @groups = Group.with_order_status_check(params[:id]) + render json: fmt(ok, @groups) + end - # 絞り込み機能 - def get_refinement_order_status_check - fes_year_id = params[:fes_year_id].to_i - group_category_id = params[:group_category_id].to_i - is_international = params[:is_international].to_i - is_external = params[:is_external].to_i # 0: 指定なし(ALL) 1: true 2: false + # admin_pageのviewの形に整える + def fit_group_index_for_admin_view(groups) + groups.map do |group| + { + "group": group, + "user": group.user&.id, + "group_category": group.group_category&.id, + "fes_year": group.fes_year&.id, + "sub_rep": group.sub_rep&.id, + "place_order": group.place_order&.id, + "stage_orders": group.stage_orders.count.zero? ? nil : group.stage_orders[0].id, + "stage_common_option": group.stage_common_option&.id, + "power_orders": group.power_orders.count.zero? ? nil : group.power_orders[0].id, + "rental_orders": group.rental_orders.count.zero? ? nil : group.rental_orders[0].id, + "employees": group.employees.count.zero? ? nil : group.employees[0].id, + "food_product": group.food_products.empty? ? nil : true, + "purchase_list": if group.food_products.empty? + nil + elsif group.food_products.any? do |food_product| + !food_product.purchase_lists.empty? + end + true + end, + "public_relation": group.public_relation&.id, + "venue_map": group.venue_map&.id, + "announcement": group.announcement&.status, + "cooking_process_order": group.cooking_process_order&.id + } + end + end - @groups = Group.all - @groups = @groups.where(fes_year_id: fes_year_id) unless fes_year_id == 0 - @groups = @groups.where(group_category_id: group_category_id) unless group_category_id == 0 - @groups = @groups.where(is_international: is_international == 1) unless is_international == 0 - @groups = @groups.where(is_external: is_external == 1) unless is_external == 0 + # 絞り込み機能 + def get_refinement_order_status_check + fes_year_id = params[:fes_year_id].to_i + group_category_id = params[:group_category_id].to_i + is_international = params[:is_international].to_i + is_external = params[:is_external].to_i # 0: 指定なし(ALL) 1: true 2: false - if @groups.count == 0 - render json: fmt(not_found, [], 'Not found groups') - else - render json: fmt(ok, fit_group_index_for_admin_view(@groups)) - end - end + @groups = Group.all + @groups = @groups.where(fes_year_id: fes_year_id) unless fes_year_id.zero? + @groups = @groups.where(group_category_id: group_category_id) unless group_category_id.zero? + @groups = @groups.where(is_international: is_international == 1) unless is_international.zero? + @groups = @groups.where(is_external: is_external == 1) unless is_external.zero? + + if @groups.count.zero? + render json: fmt(not_found, [], 'Not found groups') + else + render json: fmt(ok, fit_group_index_for_admin_view(@groups)) + end + end - # あいまい検索機能 - def get_search_order_status_check - word = params[:word] - @groups = Group.with_order_status_check_narrow_down_by_search_word(word) - if @groups.count == 0 - render json: fmt(not_found, [], 'Not found groups') - else - render json: fmt(ok, @groups) + # あいまい検索機能 + def get_search_order_status_check + word = params[:word] + @groups = Group.with_order_status_check_narrow_down_by_search_word(word) + if @groups.count.zero? + render json: fmt(not_found, [], 'Not found groups') + else + render json: fmt(ok, @groups) + end + end end end end diff --git a/api/app/controllers/api/v1/output_csv_controller.rb b/api/app/controllers/api/v1/output_csv_controller.rb index 5d589d7f6..ee8a8ed35 100644 --- a/api/app/controllers/api/v1/output_csv_controller.rb +++ b/api/app/controllers/api/v1/output_csv_controller.rb @@ -1,519 +1,511 @@ -class Api::V1::OutputCsvController < ApplicationController - require 'csv' - - def output_groups_csv - if params[:fes_year_id].to_i == 0 - # 全件選択 - @groups = Group.all - filename_year = '全' - else - @groups = Group.where(fes_year_id: params[:fes_year_id]) - filename_year = FesYear.find(params[:fes_year_id]).year_num - end - bom = "\uFEFF" - csv_data = CSV.generate(bom) do |csv| - column_name = %w[参加団体名 企画名 活動内容 代表者 メールアドレス カテゴリー 開催年] - csv << column_name - @groups.each do |group| - # データが存在しない場合はスキップする - next if group.nil? - - column_values = [ - group.name, - group.project_name, - group.activity, - group.user.name, - group.user.email, - group.group_category.name, - group.fes_year.year_num - ] - csv << column_values +# frozen_string_literal: true + +module Api + module V1 + class OutputCsvController < ApplicationController + require 'csv' + + def output_groups_csv + if params[:fes_year_id].to_i.zero? + # 全件選択 + @groups = Group.all + filename_year = '全' + else + @groups = Group.where(fes_year_id: params[:fes_year_id]) + filename_year = FesYear.find(params[:fes_year_id]).year_num + end + bom = "\uFEFF" + csv_data = CSV.generate(bom) do |csv| + column_name = %w[参加団体名 企画名 活動内容 代表者 メールアドレス カテゴリー 開催年] + csv << column_name + @groups.each do |group| + # データが存在しない場合はスキップする + next if group.nil? + + column_values = [ + group.name, + group.project_name, + group.activity, + group.user.name, + group.user.email, + group.group_category.name, + group.fes_year.year_num + ] + csv << column_values + end + end + send_data(csv_data, filename: "参加団体申請_#{filename_year}年度.csv") end - end - send_data(csv_data, filename: "参加団体申請_#{filename_year}年度.csv") - end - def output_assign_rental_items_csv - if params[:fes_year_id].to_i == 0 - # 全件選択 - @assign_rental_items = AssignRentalItem.all - filename_year = '全' - else - @assign_rental_items = Group.where(fes_year_id: params[:fes_year_id]) - filename_year = FesYear.find(params[:fes_year_id]).year_num - end - bom = "\uFEFF" - csv_data = CSV.generate(bom) do |csv| - # column_name = %w(識別番号 参加団体名 カテゴリー 活動場所 使用電力 貸出物品名 借りる場所 数量 貸出日 返却日 開催年) - column_name = %w[識別番号 参加団体名 カテゴリー 活動場所 使用電力 貸出物品名 借りる場所 数量] - csv << column_name - @assign_rental_items.each do |assign_rental_item| - # データが存在しない場合はスキップする - next if assign_rental_item.nil? - - column_values = [ - assign_rental_item.group.number, - assign_rental_item.group.name, - assign_rental_item.group.group_category.name, - assign_rental_item.group.place, - assign_rental_item.group.sum_power_orders, - assign_rental_item.rental_item.name, - assign_rental_item.stocker_place.name, - assign_rental_item.num - # assign_rental_item.group.fes_year.fes_dates.where(days_num: 0).nil? ? nil : assign_rental_item.group.fes_year.fes_dates.where(days_num: 0).first.date, - # assign_rental_item.group.fes_year.fes_dates.where(days_num: 3).nil? ? nil : assign_rental_item.group.fes_year.fes_dates.where(days_num: 3).first.date, - # assign_rental_item.group.fes_year.year_num - ] - csv << column_values + def output_assign_rental_items_csv + if params[:fes_year_id].to_i.zero? + # 全件選択 + @assign_rental_items = AssignRentalItem.all + filename_year = '全' + else + @assign_rental_items = Group.where(fes_year_id: params[:fes_year_id]) + filename_year = FesYear.find(params[:fes_year_id]).year_num + end + bom = "\uFEFF" + csv_data = CSV.generate(bom) do |csv| + # column_name = %w(識別番号 参加団体名 カテゴリー 活動場所 使用電力 貸出物品名 借りる場所 数量 貸出日 返却日 開催年) + column_name = %w[識別番号 参加団体名 カテゴリー 活動場所 使用電力 貸出物品名 借りる場所 数量] + csv << column_name + @assign_rental_items.each do |assign_rental_item| + # データが存在しない場合はスキップする + next if assign_rental_item.nil? + + column_values = [ + assign_rental_item.group.number, + assign_rental_item.group.name, + assign_rental_item.group.group_category.name, + assign_rental_item.group.place, + assign_rental_item.group.sum_power_orders, + assign_rental_item.rental_item.name, + assign_rental_item.stocker_place.name, + assign_rental_item.num + # assign_rental_item.group.fes_year.fes_dates.where(days_num: 0).nil? ? nil : assign_rental_item.group.fes_year.fes_dates.where(days_num: 0).first.date, + # assign_rental_item.group.fes_year.fes_dates.where(days_num: 3).nil? ? nil : assign_rental_item.group.fes_year.fes_dates.where(days_num: 3).first.date, + # assign_rental_item.group.fes_year.year_num + ] + csv << column_values + end + end + send_data(csv_data, filename: "参加団体情報リストまとめ_#{filename_year}年度.csv") end - end - send_data(csv_data, filename: "参加団体情報リストまとめ_#{filename_year}年度.csv") - end - def output_sub_reps_csv - if params[:fes_year_id].to_id == 0 - @sub_reps = Group.preload(:sub_rep).map { |group| group.sub_rep } - filename_year = '全' - else - @sub_reps = Group.where(fes_year_id: params[:fes_year_id]).preload(:sub_rep).map { |group| group.sub_rep } - filename_year = FesYear.find(params[:fes_year_id]).year_num - end - bom = "\uFEFF" - csv_data = CSV.generate(bom) do |csv| - column_name = %w[参加団体名 カテゴリー 名前 学科 学年 学籍番号 メールアドレス 電話番号 開催年] - csv << column_name - @sub_reps.each do |sub_rep| - # データが存在しない場合はスキップする - next if sub_rep.nil? - - column_values = [ - sub_rep.group.name, - sub_rep.group.group_category.name, - sub_rep.name, - sub_rep.department.name, - sub_rep.grade.name, - sub_rep.student_id, - sub_rep.email, - sub_rep.tel, - sub_rep.group.fes_year.year_num - ] - csv << column_values + def output_sub_reps_csv + if params[:fes_year_id].to_id.zero? + @sub_reps = Group.preload(:sub_rep).map(&:sub_rep) + filename_year = '全' + else + @sub_reps = Group.where(fes_year_id: params[:fes_year_id]).preload(:sub_rep).map(&:sub_rep) + filename_year = FesYear.find(params[:fes_year_id]).year_num + end + bom = "\uFEFF" + csv_data = CSV.generate(bom) do |csv| + column_name = %w[参加団体名 カテゴリー 名前 学科 学年 学籍番号 メールアドレス 電話番号 開催年] + csv << column_name + @sub_reps.each do |sub_rep| + # データが存在しない場合はスキップする + next if sub_rep.nil? + + column_values = [ + sub_rep.group.name, + sub_rep.group.group_category.name, + sub_rep.name, + sub_rep.department.name, + sub_rep.grade.name, + sub_rep.student_id, + sub_rep.email, + sub_rep.tel, + sub_rep.group.fes_year.year_num + ] + csv << column_values + end + end + send_data(csv_data, filename: "副代表_#{filename_year}年度.csv") end - end - send_data(csv_data, filename: "副代表_#{filename_year}年度.csv") - end - def output_rental_orders_csv - if params[:fes_year_id].to_i == 0 - @rental_orders = Group.preload(:rental_orders).map { |group| group.rental_orders } - filename_year = '全' - else - @rental_orders = Group.where(fes_year_id: params[:fes_year_id]).preload(:rental_orders).map do |group| - group.rental_orders - end - filename_year = FesYear.find(params[:fes_year_id]).year_num - end - bom = "\uFEFF" - csv_data = CSV.generate(bom) do |csv| - column_name = %w[参加団体名 代表者 メールアドレス カテゴリー 物品名 数 開催年] - csv << column_name - @rental_orders.each do |group| - # データが存在しない場合はスキップする - next if group.nil? - - group.each do |rental_order| - # データが存在しない場合はスキップする - next if rental_order.nil? - - column_values = [ - rental_order.group.name, - rental_order.group.user.name, - rental_order.group.user.email, - rental_order.group.group_category.name, - rental_order.rental_item.name, - rental_order.num, - rental_order.group.fes_year.year_num - ] - csv << column_values + def output_rental_orders_csv + if params[:fes_year_id].to_i.zero? + @rental_orders = Group.preload(:rental_orders).map(&:rental_orders) + filename_year = '全' + else + @rental_orders = Group.where(fes_year_id: params[:fes_year_id]).preload(:rental_orders).map(&:rental_orders) + filename_year = FesYear.find(params[:fes_year_id]).year_num end + bom = "\uFEFF" + csv_data = CSV.generate(bom) do |csv| + column_name = %w[参加団体名 代表者 メールアドレス カテゴリー 物品名 数 開催年] + csv << column_name + @rental_orders.each do |group| + # データが存在しない場合はスキップする + next if group.nil? + + group.each do |rental_order| + # データが存在しない場合はスキップする + next if rental_order.nil? + + column_values = [ + rental_order.group.name, + rental_order.group.user.name, + rental_order.group.user.email, + rental_order.group.group_category.name, + rental_order.rental_item.name, + rental_order.num, + rental_order.group.fes_year.year_num + ] + csv << column_values + end + end + end + send_data(csv_data, filename: "物品申請_#{filename_year}年度.csv") end - end - send_data(csv_data, filename: "物品申請_#{filename_year}年度.csv") - end - def output_power_orders_csv - if params[:fes_year_id].to_i == 0 - @power_orders = Group.preload(:power_orders).map { |group| group.power_orders } - filename_year = '全' - else - @power_orders = Group.where(fes_year_id: params[:fes_year_id]).preload(:power_orders).map do |group| - group.power_orders - end - filename_year = FesYear.find(params[:fes_year_id]).year_num - end - bom = "\uFEFF" - csv_data = CSV.generate(bom) do |csv| - column_name = %w[参加団体名 代表者 メールアドレス カテゴリー 製品 URL 電力 メーカー 型番] - csv << column_name - @power_orders.each do |group| - # データが存在しない場合はスキップする - next if group.nil? - - group.each do |power_order| - # データが存在しない場合はスキップする - next if power_order.nil? - - column_values = [ - power_order.group.name, - power_order.group.user.name, - power_order.group.user.email, - power_order.group.group_category.name, - power_order.item, - power_order.item_url, - power_order.power, - power_order.manufacturer, - power_order.model - ] - csv << column_values + def output_power_orders_csv + if params[:fes_year_id].to_i.zero? + @power_orders = Group.preload(:power_orders).map(&:power_orders) + filename_year = '全' + else + @power_orders = Group.where(fes_year_id: params[:fes_year_id]).preload(:power_orders).map(&:power_orders) + filename_year = FesYear.find(params[:fes_year_id]).year_num end + bom = "\uFEFF" + csv_data = CSV.generate(bom) do |csv| + column_name = %w[参加団体名 代表者 メールアドレス カテゴリー 製品 URL 電力 メーカー 型番] + csv << column_name + @power_orders.each do |group| + # データが存在しない場合はスキップする + next if group.nil? + + group.each do |power_order| + # データが存在しない場合はスキップする + next if power_order.nil? + + column_values = [ + power_order.group.name, + power_order.group.user.name, + power_order.group.user.email, + power_order.group.group_category.name, + power_order.item, + power_order.item_url, + power_order.power, + power_order.manufacturer, + power_order.model + ] + csv << column_values + end + end + end + send_data(csv_data, filename: "電力申請_#{filename_year}年度.csv") end - end - send_data(csv_data, filename: "電力申請_#{filename_year}年度.csv") - end - def output_place_orders_csv - if params[:fes_year_id].to_i == 0 - @place_orders = Group.preload(:place_order).map { |group| group.place_order } - filename_year = '全' - else - @place_orders = Group.where(fes_year_id: params[:fes_year_id]).preload(:place_order).map do |group| - group.place_order - end - filename_year = FesYear.find(params[:fes_year_id]).year_num - end - bom = "\uFEFF" - csv_data = CSV.generate(bom) do |csv| - column_name = %w[参加団体名 代表者 メールアドレス カテゴリー 第1希望 第2希望 第3希望 備考] - csv << column_name - @place_orders.each do |place_order| - # データが存在しない場合はスキップする - next if place_order.nil? - - column_values = [ - place_order.group.name, - place_order.group.user.name, - place_order.group.user.email, - place_order.group.group_category.name, - Place.find(place_order.first).name, - Place.find(place_order.second).name, - Place.find(place_order.third).name, - place_order.remark - ] - csv << column_values + def output_place_orders_csv + if params[:fes_year_id].to_i.zero? + @place_orders = Group.preload(:place_order).map(&:place_order) + filename_year = '全' + else + @place_orders = Group.where(fes_year_id: params[:fes_year_id]).preload(:place_order).map(&:place_order) + filename_year = FesYear.find(params[:fes_year_id]).year_num + end + bom = "\uFEFF" + csv_data = CSV.generate(bom) do |csv| + column_name = %w[参加団体名 代表者 メールアドレス カテゴリー 第1希望 第2希望 第3希望 備考] + csv << column_name + @place_orders.each do |place_order| + # データが存在しない場合はスキップする + next if place_order.nil? + + column_values = [ + place_order.group.name, + place_order.group.user.name, + place_order.group.user.email, + place_order.group.group_category.name, + Place.find(place_order.first).name, + Place.find(place_order.second).name, + Place.find(place_order.third).name, + place_order.remark + ] + csv << column_values + end + end + send_data(csv_data, filename: "会場申請_#{filename_year}年度.csv") end - end - send_data(csv_data, filename: "会場申請_#{filename_year}年度.csv") - end - def output_stage_orders_csv - if params[:fes_year_id].to_i == 0 - @stage_orders = Group.preload(:stage_orders).map { |group| group.stage_orders } - filename_year = '全' - else - @stage_orders = Group.where(fes_year_id: params[:fes_year_id]).preload(:stage_orders).map do |group| - group.stage_orders - end - filename_year = FesYear.find(params[:fes_year_id]).year_num - end - bom = "\uFEFF" - csv_data = CSV.generate(bom) do |csv| - column_name = %w[参加団体名 カテゴリー 天気 日付 曜日 何日目 第1希望 第2希望 使用時間 準備時間 片付け時間 準備開始時刻 演目開始時刻 演目終了時刻 片付け終了時刻] - csv << column_name - @stage_orders.each do |group| - # データが存在しない場合はスキップする - next if group.nil? - - group.each do |stage_order| - # データが存在しない場合はスキップする - next if stage_order.nil? - - column_values = [ - stage_order.group.name, - stage_order.group.group_category.name, - stage_order.is_sunny ? '晴れ' : '雨', - stage_order.fes_date.date, - stage_order.fes_date.day, - stage_order.fes_date.days_num, - Stage.find(stage_order.stage_first).name, - Stage.find(stage_order.stage_second).name, - stage_order.use_time_interval, - stage_order.prepare_time_interval, - stage_order.cleanup_time_interval, - stage_order.prepare_start_time, - stage_order.performance_start_time, - stage_order.performance_end_time, - stage_order.cleanup_end_time - ] - csv << column_values + def output_stage_orders_csv + if params[:fes_year_id].to_i.zero? + @stage_orders = Group.preload(:stage_orders).map(&:stage_orders) + filename_year = '全' + else + @stage_orders = Group.where(fes_year_id: params[:fes_year_id]).preload(:stage_orders).map(&:stage_orders) + filename_year = FesYear.find(params[:fes_year_id]).year_num end + bom = "\uFEFF" + csv_data = CSV.generate(bom) do |csv| + column_name = %w[参加団体名 カテゴリー 天気 日付 曜日 何日目 第1希望 第2希望 使用時間 準備時間 片付け時間 準備開始時刻 演目開始時刻 演目終了時刻 片付け終了時刻] + csv << column_name + @stage_orders.each do |group| + # データが存在しない場合はスキップする + next if group.nil? + + group.each do |stage_order| + # データが存在しない場合はスキップする + next if stage_order.nil? + + column_values = [ + stage_order.group.name, + stage_order.group.group_category.name, + stage_order.is_sunny ? '晴れ' : '雨', + stage_order.fes_date.date, + stage_order.fes_date.day, + stage_order.fes_date.days_num, + Stage.find(stage_order.stage_first).name, + Stage.find(stage_order.stage_second).name, + stage_order.use_time_interval, + stage_order.prepare_time_interval, + stage_order.cleanup_time_interval, + stage_order.prepare_start_time, + stage_order.performance_start_time, + stage_order.performance_end_time, + stage_order.cleanup_end_time + ] + csv << column_values + end + end + end + send_data(csv_data, filename: "ステージ申請_#{filename_year}年度.csv") end - end - send_data(csv_data, filename: "ステージ申請_#{filename_year}年度.csv") - end - def output_stage_common_options_csv - if params[:fes_year_id].to_i == 0 - @stage_common_options = Group.preload(:stage_common_option).map { |group| group.stage_common_option } - filename_year = '全' - else - @stage_common_options = Group.where(fes_year_id: params[:fes_year_id]).preload(:stage_common_option).map do |group| - group.stage_common_option - end - filename_year = FesYear.find(params[:fes_year_id]).year_num - end - bom = "\uFEFF" - csv_data = CSV.generate(bom) do |csv| - column_name = %w[参加団体名 所持機器の使用 音楽の使用 撮影許可 大きな音 内容] - csv << column_name - @stage_common_options.each do |stage_common_option| - # データが存在しない場合はスキップする - next if stage_common_option.nil? - - column_values = [ - stage_common_option.group.name, - stage_common_option.own_equipment ? '使用する' : '使用しない', - stage_common_option.bgm ? '使用する' : '使用しない', - stage_common_option.camera_permission ? '許可する' : '許可しない', - stage_common_option.loud_sound ? '出す' : '出さない' - ] - csv << column_values + def output_stage_common_options_csv + if params[:fes_year_id].to_i.zero? + @stage_common_options = Group.preload(:stage_common_option).map(&:stage_common_option) + filename_year = '全' + else + @stage_common_options = Group.where(fes_year_id: params[:fes_year_id]).preload(:stage_common_option).map(&:stage_common_option) + filename_year = FesYear.find(params[:fes_year_id]).year_num + end + bom = "\uFEFF" + csv_data = CSV.generate(bom) do |csv| + column_name = %w[参加団体名 所持機器の使用 音楽の使用 撮影許可 大きな音 内容] + csv << column_name + @stage_common_options.each do |stage_common_option| + # データが存在しない場合はスキップする + next if stage_common_option.nil? + + column_values = [ + stage_common_option.group.name, + stage_common_option.own_equipment ? '使用する' : '使用しない', + stage_common_option.bgm ? '使用する' : '使用しない', + stage_common_option.camera_permission ? '許可する' : '許可しない', + stage_common_option.loud_sound ? '出す' : '出さない' + ] + csv << column_values + end + end + send_data(csv_data, filename: "ステージオプション申請_#{filename_year}年度.csv") end - end - send_data(csv_data, filename: "ステージオプション申請_#{filename_year}年度.csv") - end - def output_employees_csv - if params[:fes_year_id].to_i == 0 - @employees = Group.preload(:employees).map { |group| group.employees } - filename_year = '全' - else - @employees = Group.where(fes_year_id: params[:fes_year_id]).preload(:employees).map { |group| group.employees } - filename_year = FesYear.find(params[:fes_year_id]).year_num - end - bom = "\uFEFF" - csv_data = CSV.generate(bom) do |csv| - column_name = %w[参加団体名 名前 学籍番号] - csv << column_name - @employees.each do |group| - # データが存在しない場合はスキップする - next if group.nil? - - group.each do |employee| - # データが存在しない場合はスキップする - next if employee.nil? - - column_values = [ - employee.group.name, - employee.name, - employee.student_id - ] - csv << column_values + def output_employees_csv + if params[:fes_year_id].to_i.zero? + @employees = Group.preload(:employees).map(&:employees) + filename_year = '全' + else + @employees = Group.where(fes_year_id: params[:fes_year_id]).preload(:employees).map(&:employees) + filename_year = FesYear.find(params[:fes_year_id]).year_num + end + bom = "\uFEFF" + csv_data = CSV.generate(bom) do |csv| + column_name = %w[参加団体名 名前 学籍番号] + csv << column_name + @employees.each do |group| + # データが存在しない場合はスキップする + next if group.nil? + + group.each do |employee| + # データが存在しない場合はスキップする + next if employee.nil? + + column_values = [ + employee.group.name, + employee.name, + employee.student_id + ] + csv << column_values + end + end end + send_data(csv_data, filename: "従業員申請_#{filename_year}年度.csv") end - end - send_data(csv_data, filename: "従業員申請_#{filename_year}年度.csv") - end - def output_food_products_csv - if params[:fes_year_id].to_i == 0 - @food_products = Group.preload(:food_products).map { |group| group.food_products } - filename_year = '全' - else - @food_products = Group.where(fes_year_id: params[:fes_year_id]).preload(:food_products).map do |group| - group.food_products - end - filename_year = FesYear.find(params[:fes_year_id]).year_num - end - bom = "\uFEFF" - csv_data = CSV.generate(bom) do |csv| - column_name = %w[参加団体名 名前 1日目の個数 2日目の個数 調理の有無] - csv << column_name - @food_products.each do |group| - # データが存在しない場合はスキップする - next if group.nil? - - group.each do |food_product| - # データが存在しない場合はスキップする - next if food_product.nil? - - column_values = [ - food_product.group.name, - food_product.name, - food_product.first_day_num, - food_product.second_day_num, - food_product.is_cooking ? 'する' : 'しない' - ] - csv << column_values + def output_food_products_csv + if params[:fes_year_id].to_i.zero? + @food_products = Group.preload(:food_products).map(&:food_products) + filename_year = '全' + else + @food_products = Group.where(fes_year_id: params[:fes_year_id]).preload(:food_products).map(&:food_products) + filename_year = FesYear.find(params[:fes_year_id]).year_num + end + bom = "\uFEFF" + csv_data = CSV.generate(bom) do |csv| + column_name = %w[参加団体名 名前 1日目の個数 2日目の個数 調理の有無] + csv << column_name + @food_products.each do |group| + # データが存在しない場合はスキップする + next if group.nil? + + group.each do |food_product| + # データが存在しない場合はスキップする + next if food_product.nil? + + column_values = [ + food_product.group.name, + food_product.name, + food_product.first_day_num, + food_product.second_day_num, + food_product.is_cooking ? 'する' : 'しない' + ] + csv << column_values + end + end end + send_data(csv_data, filename: "販売品申請_#{filename_year}年度.csv") end - end - send_data(csv_data, filename: "販売品申請_#{filename_year}年度.csv") - end - def output_purchase_lists_csv - if params[:fes_year_id].to_i == 0 - @purchase_lists = FoodProduct.preload(:purchase_lists).map { |food_product| food_product.purchase_lists } - filename_year = '全' - else - @purchase_lists = FoodProduct.preload(:purchase_lists).map do |food_product| - food_product.purchase_lists if food_product.group.fes_year_id == params[:fes_year_id] - end - filename_year = FesYear.find(params[:fes_year_id]).year_num - end - bom = "\uFEFF" - csv_data = CSV.generate(bom) do |csv| - column_name = %w[参加団体名 販売品 購入品 なまもの 購入店 購入日 曜日 何日目 URL] - csv << column_name - @purchase_lists.each do |food_product| - # データが存在しない場合はスキップする - next if food_product.nil? - - food_product.each do |purchase_list| - # データが存在しない場合はスキップする - next if purchase_list.nil? - - column_values = [ - purchase_list.food_product.group.name, - purchase_list.food_product.name, - purchase_list.items, - purchase_list.is_fresh ? 'はい' : 'いいえ', - purchase_list.shop.name, - purchase_list.fes_date.date, - purchase_list.fes_date.day, - purchase_list.fes_date.days_num, - purchase_list.url - ] - csv << column_values + def output_purchase_lists_csv + if params[:fes_year_id].to_i.zero? + @purchase_lists = FoodProduct.preload(:purchase_lists).map(&:purchase_lists) + filename_year = '全' + else + @purchase_lists = FoodProduct.preload(:purchase_lists).map do |food_product| + food_product.purchase_lists if food_product.group.fes_year_id == params[:fes_year_id] + end + filename_year = FesYear.find(params[:fes_year_id]).year_num + end + bom = "\uFEFF" + csv_data = CSV.generate(bom) do |csv| + column_name = %w[参加団体名 販売品 購入品 なまもの 購入店 購入日 曜日 何日目 URL] + csv << column_name + @purchase_lists.each do |food_product| + # データが存在しない場合はスキップする + next if food_product.nil? + + food_product.each do |purchase_list| + # データが存在しない場合はスキップする + next if purchase_list.nil? + + column_values = [ + purchase_list.food_product.group.name, + purchase_list.food_product.name, + purchase_list.items, + purchase_list.is_fresh ? 'はい' : 'いいえ', + purchase_list.shop.name, + purchase_list.fes_date.date, + purchase_list.fes_date.day, + purchase_list.fes_date.days_num, + purchase_list.url + ] + csv << column_values + end + end end + send_data(csv_data, filename: "購入品申請_#{filename_year}年度.csv") end - end - send_data(csv_data, filename: "購入品申請_#{filename_year}年度.csv") - end - def output_users_csv - if params[:fes_year_id].to_i == 0 - @groups = Group.preload(:user, :sub_rep, user: :user_detail) # 必要な関連を事前にロード - filename_year = '全' - else - @groups = Group.where(fes_year_id: params[:fes_year_id]).preload(:user, :sub_rep, user: :user_detail) # 必要な関連を事前にロード - filename_year = FesYear.find(params[:fes_year_id]).year_num - end - - @categories = [] - for i in 1..6 do - group = @groups.where(group_category_id: i) - @categories << group - end + def output_users_csv + if params[:fes_year_id].to_i.zero? + @groups = Group.preload(:user, :sub_rep, user: :user_detail) # 必要な関連を事前にロード + filename_year = '全' + else + @groups = Group.where(fes_year_id: params[:fes_year_id]).preload(:user, :sub_rep, user: :user_detail) # 必要な関連を事前にロード + filename_year = FesYear.find(params[:fes_year_id]).year_num + end - bom = "\uFEFF" - csv_data = CSV.generate(bom) do |csv| - column_name = %w[参加団体形式 団体番号 団体名 氏名 電話番号 メールアドレス 備考欄] - csv << column_name - @categories.each do |category| - next unless category.exists? - - category.each do |group| - rep = group.user - sub_rep = group.sub_rep - # 代表者情報を1行目に追加 - csv << [ - group.group_category.name, - group.number, - group.name, - rep&.name, - rep&.user_detail&.tel, - rep&.email, - '' # 備考欄は空のまま - ] - # 副代表者情報を2行目に追加 - csv << [ - '', - '', - '', - sub_rep&.name, - sub_rep&.tel, - sub_rep&.email, - '' # 備考欄は空のまま - ] + @categories = [] + (1..6).each do |i| + group = @groups.where(group_category_id: i) + @categories << group end - end - end - send_data(csv_data, filename: "連絡先リスト_#{filename_year}年度.csv") - end + bom = "\uFEFF" + csv_data = CSV.generate(bom) do |csv| + column_name = %w[参加団体形式 団体番号 団体名 氏名 電話番号 メールアドレス 備考欄] + csv << column_name + @categories.each do |category| + next unless category.exists? + + category.each do |group| + rep = group.user + sub_rep = group.sub_rep + # 代表者情報を1行目に追加 + csv << [ + group.group_category.name, + group.number, + group.name, + rep&.name, + rep&.user_detail&.tel, + rep&.email, + '' # 備考欄は空のまま + ] + # 副代表者情報を2行目に追加 + csv << [ + '', + '', + '', + sub_rep&.name, + sub_rep&.tel, + sub_rep&.email, + '' # 備考欄は空のまま + ] + end + end + end - def output_announcements_csv - @announcements = Announcement.all - bom = "\uFEFF" - csv_data = CSV.generate(bom) do |csv| - column_name = %w[参加団体名 アナウンス文] - csv << column_name - @announcements.each do |announcement| - column_values = [ - announcement.group.name, - announcement.message - ] - csv << column_values + send_data(csv_data, filename: "連絡先リスト_#{filename_year}年度.csv") end - end - send_data(csv_data, filename: '会場アナウンス文.csv') - end - def output_cooking_process_orders_csv - @cooking_process_orders = CookingProcessOrder.all - bom = "\uFEFF" - csv_data = CSV.generate(bom) do |csv| - column_name = %w[参加団体名 営業前:調理場 営業中:調理場 テント内] - csv << column_name - @cooking_process_orders.each do |cooking_process_order| - column_values = [ - cooking_process_order.group.name, - cooking_process_order.pre_open_kitchen ? '申請する' : '申請しない', - cooking_process_order.during_open_kitchen ? '申請する' : '申請しない', - cooking_process_order.tent - ] - csv << column_values + def output_announcements_csv + @announcements = Announcement.all + bom = "\uFEFF" + csv_data = CSV.generate(bom) do |csv| + column_name = %w[参加団体名 アナウンス文] + csv << column_name + @announcements.each do |announcement| + column_values = [ + announcement.group.name, + announcement.message + ] + csv << column_values + end + end + send_data(csv_data, filename: '会場アナウンス文.csv') end - end - send_data(csv_data, filename: '調理工程申請.csv') - end - def output_public_relations_csv - if params[:fes_year_id].to_i == 0 - @public_relations = Group.preload(:public_relation).map { |group| group.public_relation } - filename_year = '全' - else - @public_relations = Group.where(fes_year_id: params[:fes_year_id]).preload(:public_relation).map do |group| - group.public_relation + def output_cooking_process_orders_csv + @cooking_process_orders = CookingProcessOrder.all + bom = "\uFEFF" + csv_data = CSV.generate(bom) do |csv| + column_name = %w[参加団体名 営業前:調理場 営業中:調理場 テント内] + csv << column_name + @cooking_process_orders.each do |cooking_process_order| + column_values = [ + cooking_process_order.group.name, + cooking_process_order.pre_open_kitchen ? '申請する' : '申請しない', + cooking_process_order.during_open_kitchen ? '申請する' : '申請しない', + cooking_process_order.tent + ] + csv << column_values + end + end + send_data(csv_data, filename: '調理工程申請.csv') end - filename_year = FesYear.find(params[:fes_year_id]).year_num - end - bom = "\uFEFF" - csv_data = CSV.generate(bom) do |csv| - column_name = %w[参加団体名 PR文 URL] - csv << column_name - @public_relations.each do |public_relations| - # データが存在しない場合はスキップする - next if public_relations.nil? - - column_values = [ - public_relations.group.name, - public_relations.blurb, - public_relations.picture_path - ] - csv << column_values + + def output_public_relations_csv + if params[:fes_year_id].to_i.zero? + @public_relations = Group.preload(:public_relation).map(&:public_relation) + filename_year = '全' + else + @public_relations = Group.where(fes_year_id: params[:fes_year_id]).preload(:public_relation).map(&:public_relation) + filename_year = FesYear.find(params[:fes_year_id]).year_num + end + bom = "\uFEFF" + csv_data = CSV.generate(bom) do |csv| + column_name = %w[参加団体名 PR文 URL] + csv << column_name + @public_relations.each do |public_relations| + # データが存在しない場合はスキップする + next if public_relations.nil? + + column_values = [ + public_relations.group.name, + public_relations.blurb, + public_relations.picture_path + ] + csv << column_values + end + end + send_data(csv_data, filename: "参加団体PR申請_#{filename_year}年度.csv") end end - send_data(csv_data, filename: "参加団体PR申請_#{filename_year}年度.csv") end end diff --git a/api/app/controllers/api/v1/place_allow_lists_api_controller.rb b/api/app/controllers/api/v1/place_allow_lists_api_controller.rb index 91b1c98dd..540d1aba8 100644 --- a/api/app/controllers/api/v1/place_allow_lists_api_controller.rb +++ b/api/app/controllers/api/v1/place_allow_lists_api_controller.rb @@ -1,2 +1,8 @@ -class Api::V1::PlaceAllowListsApiController < ApplicationController +# frozen_string_literal: true + +module Api + module V1 + class PlaceAllowListsApiController < ApplicationController + end + end end diff --git a/api/app/controllers/api/v1/place_orders_api_controller.rb b/api/app/controllers/api/v1/place_orders_api_controller.rb index 701180655..18c7cd034 100644 --- a/api/app/controllers/api/v1/place_orders_api_controller.rb +++ b/api/app/controllers/api/v1/place_orders_api_controller.rb @@ -1,65 +1,72 @@ -class Api::V1::PlaceOrdersApiController < ApplicationController - def get_place_order_index_for_admin_view - @place_orders = PlaceOrder.get_with_groups - render json: fmt(ok, @place_orders) - end +# frozen_string_literal: true - def get_place_order_show_for_admin_view - @place_order = PlaceOrder.get_with_group(params[:id]) - render json: fmt(ok, @place_order) - end +module Api + module V1 + class PlaceOrdersApiController < ApplicationController + def get_place_order_index_for_admin_view + @place_orders = PlaceOrder.get_with_groups + render json: fmt(ok, @place_orders) + end - # admin_pageのviewの形に整える - def fit_place_order_index_for_admin_view(place_orders) - place_orders.map do |place_order| - { - "place_order": place_order, - "place_order_name": place_order.to_place_name_h, - "group": place_order.group - } - end - end + def get_place_order_show_for_admin_view + @place_order = PlaceOrder.get_with_group(params[:id]) + render json: fmt(ok, @place_order) + end - # 絞り込み機能 - def get_refinement_place_orders - fes_year_id = params[:fes_year_id].to_i - place_id = params[:place_id].to_i - group_category_id = params[:group_category_id].to_i + # admin_pageのviewの形に整える + def fit_place_order_index_for_admin_view(place_orders) + place_orders.map do |place_order| + { + "place_order": place_order, + "place_order_name": place_order.to_place_name_h, + "group": place_order.group + } + end + end - @place_orders = PlaceOrder.preload(:group) + # 絞り込み機能 + def get_refinement_place_orders + fes_year_id = params[:fes_year_id].to_i + place_id = params[:place_id].to_i + group_category_id = params[:group_category_id].to_i - # fes_year_id で絞り込み - @place_orders = @place_orders.joins(:group).where(groups: { fes_year_id: fes_year_id }) if fes_year_id != 0 + @place_orders = PlaceOrder.preload(:group) - # place_id で絞り込み - if place_id != 0 - @place_orders = @place_orders.where('(first = ?) OR (second = ?) OR (third = ?)', place_id, place_id, place_id) - end + # fes_year_id で絞り込み + @place_orders = @place_orders.joins(:group).where(groups: { fes_year_id: fes_year_id }) if fes_year_id != 0 - # group_category_id で絞り込み - if group_category_id != 0 - @place_orders = @place_orders.joins(:group).where(groups: { group_category_id: group_category_id }) - end + # place_id で絞り込み + if place_id != 0 + @place_orders = @place_orders.where('(first = ?) OR (second = ?) OR (third = ?)', place_id, place_id, + place_id) + end - if @place_orders.empty? - render json: fmt(not_found, [], 'Not found place_orders') - else - render json: fmt(ok, fit_place_order_index_for_admin_view(@place_orders)) - end - end + # group_category_id で絞り込み + if group_category_id != 0 + @place_orders = @place_orders.joins(:group).where(groups: { group_category_id: group_category_id }) + end + + if @place_orders.empty? + render json: fmt(not_found, [], 'Not found place_orders') + else + render json: fmt(ok, fit_place_order_index_for_admin_view(@place_orders)) + end + end - # あいまい検索 - def get_search_place_orders - word = params[:word] - @place_orders = PlaceOrder.all.map do |place_order| - if place_order.group.name.include?(word) || place_order.to_place_name_h[:first].include?(word) || place_order.to_place_name_h[:second].include?(word) || place_order.to_place_name_h[:third].include?(word) - place_order + # あいまい検索 + def get_search_place_orders + word = params[:word] + @place_orders = PlaceOrder.all.map do |place_order| + if place_order.group.name.include?(word) || place_order.to_place_name_h[:first].include?(word) || place_order.to_place_name_h[:second].include?(word) || place_order.to_place_name_h[:third].include?(word) + place_order + end + end.compact + if @place_orders.count.zero? + render json: fmt(not_found, [], 'Not found place_orders') + else + render json: fmt(ok, fit_place_order_index_for_admin_view(@place_orders)) + end end - end.compact - if @place_orders.count == 0 - render json: fmt(not_found, [], 'Not found place_orders') - else - render json: fmt(ok, fit_place_order_index_for_admin_view(@place_orders)) end end end diff --git a/api/app/controllers/api/v1/power_orders_api_controller.rb b/api/app/controllers/api/v1/power_orders_api_controller.rb index bc8ccc090..94abea901 100644 --- a/api/app/controllers/api/v1/power_orders_api_controller.rb +++ b/api/app/controllers/api/v1/power_orders_api_controller.rb @@ -1,55 +1,61 @@ -class Api::V1::PowerOrdersApiController < ApplicationController - def get_power_order_index_for_admin_view - @power_orders = PowerOrder.with_groups - render json: fmt(ok, @power_orders) - end +# frozen_string_literal: true - def get_power_order_show_for_admin_view - @power_order = PowerOrder.with_group_and_place_order(params[:id]) - render json: fmt(ok, @power_order) - end +module Api + module V1 + class PowerOrdersApiController < ApplicationController + def get_power_order_index_for_admin_view + @power_orders = PowerOrder.with_groups + render json: fmt(ok, @power_orders) + end - # admin_pageのviewの形に整える - def fit_power_order_index_for_admin_view(power_orders) - power_orders.map do |power_order| - { - "power_order": power_order, - "group": power_order.group - } - end - end + def get_power_order_show_for_admin_view + @power_order = PowerOrder.with_group_and_place_order(params[:id]) + render json: fmt(ok, @power_order) + end - # 絞り込み機能 - def get_refinement_power_orders - fes_year_id = params[:fes_year_id].to_i - power = params[:power].to_i - group_category_id = params[:group_category_id].to_i + # admin_pageのviewの形に整える + def fit_power_order_index_for_admin_view(power_orders) + power_orders.map do |power_order| + { + "power_order": power_order, + "group": power_order.group + } + end + end - # fes_year_id, power, category_idで絞り込み - @power_orders = PowerOrder.all - @power_orders = @power_orders.joins(:group).where(groups: { fes_year_id: fes_year_id }) if fes_year_id != 0 - @power_orders = @power_orders.preload(:group).where('power >= ?', power) if power != 0 - if group_category_id != 0 - @power_orders = @power_orders.joins(:group).where(groups: { group_category_id: group_category_id }) - end + # 絞り込み機能 + def get_refinement_power_orders + fes_year_id = params[:fes_year_id].to_i + power = params[:power].to_i + group_category_id = params[:group_category_id].to_i - if @power_orders.count == 0 - render json: fmt(not_found, [], 'Not found power_orders') - else - render json: fmt(ok, fit_power_order_index_for_admin_view(@power_orders)) - end - end + # fes_year_id, power, category_idで絞り込み + @power_orders = PowerOrder.all + @power_orders = @power_orders.joins(:group).where(groups: { fes_year_id: fes_year_id }) if fes_year_id != 0 + @power_orders = @power_orders.preload(:group).where('power >= ?', power) if power != 0 + if group_category_id != 0 + @power_orders = @power_orders.joins(:group).where(groups: { group_category_id: group_category_id }) + end + + if @power_orders.count.zero? + render json: fmt(not_found, [], 'Not found power_orders') + else + render json: fmt(ok, fit_power_order_index_for_admin_view(@power_orders)) + end + end - # あいまい検索 - def get_search_power_orders - word = params[:word] - @power_orders = PowerOrder.all.map do |power_order| - power_order if power_order.group.name.include?(word) || power_order.item.include?(word) - end.compact - if @power_orders.count == 0 - render json: fmt(not_found, [], 'Not found power_orders') - else - render json: fmt(ok, fit_power_order_index_for_admin_view(@power_orders)) + # あいまい検索 + def get_search_power_orders + word = params[:word] + @power_orders = PowerOrder.all.map do |power_order| + power_order if power_order.group.name.include?(word) || power_order.item.include?(word) + end.compact + if @power_orders.count.zero? + render json: fmt(not_found, [], 'Not found power_orders') + else + render json: fmt(ok, fit_power_order_index_for_admin_view(@power_orders)) + end + end end end end diff --git a/api/app/controllers/api/v1/public_relations_api_controller.rb b/api/app/controllers/api/v1/public_relations_api_controller.rb index c34bc138b..9baa484f2 100644 --- a/api/app/controllers/api/v1/public_relations_api_controller.rb +++ b/api/app/controllers/api/v1/public_relations_api_controller.rb @@ -1,46 +1,52 @@ -class Api::V1::PublicRelationsApiController < ApplicationController - def get_public_relation_for_admin_view - @groups = Group.with_public_relation(params[:id]) - render json: fmt(ok, @groups) - end +# frozen_string_literal: true - # admin_viewのpublic_relation/indexの形に整える - def fit_group_index_for_admin_view(groups) - groups.map do |group| - { - "group": group, - "group_category": group.group_category, - "fes_year": group.fes_year - } - end - end +module Api + module V1 + class PublicRelationsApiController < ApplicationController + def get_public_relation_for_admin_view + @groups = Group.with_public_relation(params[:id]) + render json: fmt(ok, @groups) + end - # 絞り込み機能 - def get_refinement_public_relations - fes_year_id = params[:fes_year_id].to_i - # 両方ともALL - if fes_year_id == 0 - @groups = Group.with_public_relations - # fes_year_idだけ指定 - elsif fes_year_id != 0 - @groups = Group.with_public_relation_narrow_down_by_fes_year(fes_year_id) - end + # admin_viewのpublic_relation/indexの形に整える + def fit_group_index_for_admin_view(groups) + groups.map do |group| + { + "group": group, + "group_category": group.group_category, + "fes_year": group.fes_year + } + end + end - if @groups.count == 0 - render json: fmt(not_found, [], 'Not found groups') - else - render json: fmt(ok, @groups) - end - end + # 絞り込み機能 + def get_refinement_public_relations + fes_year_id = params[:fes_year_id].to_i + # 両方ともALL + if fes_year_id.zero? + @groups = Group.with_public_relations + # fes_year_idだけ指定 + elsif fes_year_id != 0 + @groups = Group.with_public_relation_narrow_down_by_fes_year(fes_year_id) + end + + if @groups.count.zero? + render json: fmt(not_found, [], 'Not found groups') + else + render json: fmt(ok, @groups) + end + end - # あいまい検索機能 - def get_search_public_relations - word = params[:word] - @groups = Group.with_public_relation_narrow_down_by_search_word(word) - if @groups.count == 0 - render json: fmt(not_found, [], 'Not found groups') - else - render json: fmt(ok, @groups) + # あいまい検索機能 + def get_search_public_relations + word = params[:word] + @groups = Group.with_public_relation_narrow_down_by_search_word(word) + if @groups.count.zero? + render json: fmt(not_found, [], 'Not found groups') + else + render json: fmt(ok, @groups) + end + end end end end diff --git a/api/app/controllers/api/v1/purchase_lists_api_controller.rb b/api/app/controllers/api/v1/purchase_lists_api_controller.rb index 223cfa2b5..be6d42c91 100644 --- a/api/app/controllers/api/v1/purchase_lists_api_controller.rb +++ b/api/app/controllers/api/v1/purchase_lists_api_controller.rb @@ -1,66 +1,72 @@ -class Api::V1::PurchaseListsApiController < ApplicationController - def get_purchase_list_index_for_admin_view - @purchase_lists = PurchaseList.with_groups_and_info - render json: fmt(ok, @purchase_lists) - end +# frozen_string_literal: true - def get_purchase_list_show_for_admin_view - @purchase_list = PurchaseList.with_group_and_info(params[:id]) - render json: fmt(ok, @purchase_list) - end +module Api + module V1 + class PurchaseListsApiController < ApplicationController + def get_purchase_list_index_for_admin_view + @purchase_lists = PurchaseList.with_groups_and_info + render json: fmt(ok, @purchase_lists) + end - def fit_purchase_list_index_for_admin_view(purchase_lists) - purchase_lists.map do |purchase_list| - { - "purchase_list": purchase_list, - "purchase_list_info": purchase_list.to_info_h, - "group": purchase_list.food_product.group - } - end - end + def get_purchase_list_show_for_admin_view + @purchase_list = PurchaseList.with_group_and_info(params[:id]) + render json: fmt(ok, @purchase_list) + end - def get_refinement_purchase_lists - fes_year_id = params[:fes_year_id].to_i - is_fresh = params[:is_fresh].to_i - is_fresh_list = [nil, true, false] + def fit_purchase_list_index_for_admin_view(purchase_lists) + purchase_lists.map do |purchase_list| + { + "purchase_list": purchase_list, + "purchase_list_info": purchase_list.to_info_h, + "group": purchase_list.food_product.group + } + end + end - # 指定なし - @purchase_lists = if fes_year_id == 0 && is_fresh == 0 - PurchaseList.all - # fes_year_idだけ指定 - elsif fes_year_id != 0 && is_fresh == 0 - PurchaseList.preload(:food_product).map do |purchase_list| - purchase_list if purchase_list.food_product.group.fes_year_id == fes_year_id - end.compact - # is_freshだけ指定 - elsif fes_year_id == 0 && is_fresh != 0 - PurchaseList.where(is_fresh: is_fresh_list[is_fresh]) - # 両方指定 - else - PurchaseList.where(is_fresh: is_fresh_list[is_fresh]).preload(:food_product).map do |purchase_list| - purchase_list if purchase_list.food_product.group.fes_year_id == fes_year_id - end.compact - end + def get_refinement_purchase_lists + fes_year_id = params[:fes_year_id].to_i + is_fresh = params[:is_fresh].to_i + is_fresh_list = [nil, true, false] - if @purchase_lists.count == 0 - render json: fmt(not_found, [], 'Not found purchase_lists') - else - render json: fmt(ok, fit_purchase_list_index_for_admin_view(@purchase_lists)) - end - end + # 指定なし + @purchase_lists = if fes_year_id.zero? && is_fresh.zero? + PurchaseList.all + # fes_year_idだけ指定 + elsif fes_year_id != 0 && is_fresh.zero? + PurchaseList.preload(:food_product).map do |purchase_list| + purchase_list if purchase_list.food_product.group.fes_year_id == fes_year_id + end.compact + # is_freshだけ指定 + elsif fes_year_id.zero? && is_fresh != 0 + PurchaseList.where(is_fresh: is_fresh_list[is_fresh]) + # 両方指定 + else + PurchaseList.where(is_fresh: is_fresh_list[is_fresh]).preload(:food_product).map do |purchase_list| + purchase_list if purchase_list.food_product.group.fes_year_id == fes_year_id + end.compact + end + + if @purchase_lists.count.zero? + render json: fmt(not_found, [], 'Not found purchase_lists') + else + render json: fmt(ok, fit_purchase_list_index_for_admin_view(@purchase_lists)) + end + end - # あいまい検索 - def get_search_purchase_lists - word = params[:word] - @purchase_lists = PurchaseList.preload(:food_product).map do |purchase_list| - if purchase_list.items.include?(word) || purchase_list.food_product.name.include?(word) || purchase_list.food_product.group.name.include?(word) - purchase_list + # あいまい検索 + def get_search_purchase_lists + word = params[:word] + @purchase_lists = PurchaseList.preload(:food_product).map do |purchase_list| + if purchase_list.items.include?(word) || purchase_list.food_product.name.include?(word) || purchase_list.food_product.group.name.include?(word) + purchase_list + end + end.compact + if @purchase_lists.count.zero? + render json: fmt(not_found, [], 'Not found purchase_lists') + else + render json: fmt(ok, fit_purchase_list_index_for_admin_view(@purchase_lists)) + end end - end.compact - if @purchase_lists.count == 0 - render json: fmt(not_found, [], 'Not found purchase_lists') - else - render json: fmt(ok, fit_purchase_list_index_for_admin_view(@purchase_lists)) end end end diff --git a/api/app/controllers/api/v1/rental_item_allow_lists_api_controller.rb b/api/app/controllers/api/v1/rental_item_allow_lists_api_controller.rb index 21dd14b2c..ab2f944d9 100644 --- a/api/app/controllers/api/v1/rental_item_allow_lists_api_controller.rb +++ b/api/app/controllers/api/v1/rental_item_allow_lists_api_controller.rb @@ -1,2 +1,8 @@ -class Api::V1::RentalItemAllowListsApiController < ApplicationController +# frozen_string_literal: true + +module Api + module V1 + class RentalItemAllowListsApiController < ApplicationController + end + end end diff --git a/api/app/controllers/api/v1/rental_items_api_controller.rb b/api/app/controllers/api/v1/rental_items_api_controller.rb index 74468dc4c..c94a56953 100644 --- a/api/app/controllers/api/v1/rental_items_api_controller.rb +++ b/api/app/controllers/api/v1/rental_items_api_controller.rb @@ -1,36 +1,42 @@ -class Api::V1::RentalItemsApiController < ApplicationController - def get_rentable_items - @items = RentalItem.where(is_inside_shop_rentable: true).where(is_outside_shop_rentable: true).where(is_stage_rentable: true) - render json: fmt(ok, @items) - end +# frozen_string_literal: true - # 模擬店での貸出物品 - def get_all_rentable_items - @items = RentalItem.where(is_inside_shop_rentable: true).or(RentalItem.where(is_outside_shop_rentable: true)).or(RentalItem.where(is_stage_rentable: true)) - render json: fmt(ok, @items) - end +module Api + module V1 + class RentalItemsApiController < ApplicationController + def get_rentable_items + @items = RentalItem.where(is_inside_shop_rentable: true).where(is_outside_shop_rentable: true).where(is_stage_rentable: true) + render json: fmt(ok, @items) + end - # 模擬店での貸出物品 - def get_shop_rentable_items - @items = RentalItem.where(is_inside_shop_rentable: true).where(is_outside_shop_rentable: true) - render json: fmt(ok, @items) - end + # 模擬店での貸出物品 + def get_all_rentable_items + @items = RentalItem.where(is_inside_shop_rentable: true).or(RentalItem.where(is_outside_shop_rentable: true)).or(RentalItem.where(is_stage_rentable: true)) + render json: fmt(ok, @items) + end - # 屋内模擬店での貸出物品 - def get_inside_shop_rentable_items - @items = RentalItem.where(is_inside_shop_rentable: true) - render json: fmt(ok, @items) - end + # 模擬店での貸出物品 + def get_shop_rentable_items + @items = RentalItem.where(is_inside_shop_rentable: true).where(is_outside_shop_rentable: true) + render json: fmt(ok, @items) + end - # 屋外模擬店での貸出物品 - def get_outside_shop_rentable_items - @items = RentalItem.where(is_outside_shop_rentable: true) - render json: fmt(ok, @items) - end + # 屋内模擬店での貸出物品 + def get_inside_shop_rentable_items + @items = RentalItem.where(is_inside_shop_rentable: true) + render json: fmt(ok, @items) + end + + # 屋外模擬店での貸出物品 + def get_outside_shop_rentable_items + @items = RentalItem.where(is_outside_shop_rentable: true) + render json: fmt(ok, @items) + end - # ステージでの貸出物品 - def get_stage_rentable_items - @items = RentalItem.where(is_stage_rentable: true) - render json: fmt(ok, @items) + # ステージでの貸出物品 + def get_stage_rentable_items + @items = RentalItem.where(is_stage_rentable: true) + render json: fmt(ok, @items) + end + end end end diff --git a/api/app/controllers/api/v1/rental_orders_api_controller.rb b/api/app/controllers/api/v1/rental_orders_api_controller.rb index 4b5347aec..1ab2941e3 100644 --- a/api/app/controllers/api/v1/rental_orders_api_controller.rb +++ b/api/app/controllers/api/v1/rental_orders_api_controller.rb @@ -1,135 +1,141 @@ -class Api::V1::RentalOrdersApiController < ApplicationController - def get_rental_order_index_for_admin_view - @rental_orders = RentalOrder.with_groups_and_rental_item - render json: fmt(ok, @rental_orders) - end - - def get_rental_order_show_for_admin_view - @rental_order = RentalOrder.with_rental_item(params[:id]) - render json: fmt(ok, @rental_order) - end - - def fit_rental_order_index_for_admin_view(rental_orders) - rental_orders.map do |rental_order| - { - "rental_order": rental_order, - "rental_item": rental_order.rental_item, - "group": rental_order.group - } - end - end - - # 絞り込み機能 - def get_refinement_rental_orders - fes_year_id = params[:fes_year_id].to_i - rental_item_id = params[:rental_item_id].to_i - group_category_id = params[:group_category_id].to_i - - @rental_orders = RentalOrder.preload(:group) - - @rental_orders = @rental_orders.joins(:group).where(groups: { fes_year_id: fes_year_id }) if fes_year_id != 0 - - @rental_orders = @rental_orders.where('rental_item_id = ?', rental_item_id) if rental_item_id != 0 +# frozen_string_literal: true + +module Api + module V1 + class RentalOrdersApiController < ApplicationController + def get_rental_order_index_for_admin_view + @rental_orders = RentalOrder.with_groups_and_rental_item + render json: fmt(ok, @rental_orders) + end - if group_category_id != 0 - @rental_orders = @rental_orders.joins(:group).where(groups: { group_category_id: group_category_id }) - end + def get_rental_order_show_for_admin_view + @rental_order = RentalOrder.with_rental_item(params[:id]) + render json: fmt(ok, @rental_order) + end - if @rental_orders.count == 0 - render json: fmt(not_found, [], 'Not found rental_orders') - else - render json: fmt(ok, fit_rental_order_index_for_admin_view(@rental_orders)) - end - end + def fit_rental_order_index_for_admin_view(rental_orders) + rental_orders.map do |rental_order| + { + "rental_order": rental_order, + "rental_item": rental_order.rental_item, + "group": rental_order.group + } + end + end - # あいまい検索 - def get_search_rental_orders - word = params[:word] - @rental_orders = RentalOrder.preload(:group).map do |rental_order| - rental_order if rental_order.group.name.include?(word) - end.compact - if @rental_orders.count == 0 - render json: fmt(not_found, [], 'Not found rental_orders') - else - render json: fmt(ok, fit_rental_order_index_for_admin_view(@rental_orders)) - end - end + # 絞り込み機能 + def get_refinement_rental_orders + fes_year_id = params[:fes_year_id].to_i + rental_item_id = params[:rental_item_id].to_i + group_category_id = params[:group_category_id].to_i - # 申請一覧とその未割当 - def get_rental_orders_with_unassigned_num - rental_item_id = params[:rental_item_id].to_i - place_id = params[:place_id].to_i + @rental_orders = RentalOrder.preload(:group) - # rental_item_idが指定なし - if rental_item_id == 0 - @rental_orders = RentalOrder.all + @rental_orders = @rental_orders.joins(:group).where(groups: { fes_year_id: fes_year_id }) if fes_year_id != 0 - # rental_item_idが指定 - elsif rental_item_id != 0 - @rental_orders = RentalOrder.where(rental_item_id: rental_item_id) - end + @rental_orders = @rental_orders.where('rental_item_id = ?', rental_item_id) if rental_item_id != 0 - output = [] - if @rental_orders.length != 0 - - # place_idが指定なし - if place_id == 0 - @rental_orders.each do |rental_order| - unassigned_num = rental_order.num - AssignRentalItem.where(group_id: rental_order.group_id, - rental_item_id: rental_order.rental_item_id).sum(:num) - assign_place = if (place_order = rental_order.group.place_order) - if (assign_group_place = place_order.assign_group_place) - assign_group_place.place.name - else - 'not yet' - end - else - 'not yet' - end - - temp = { - id: rental_order.id, - group_name: rental_order.group.name, - assign_place: assign_place, - rental_item: rental_order.rental_item.name, - num: rental_order.num, - unassigned_num: unassigned_num - } - output << temp + if group_category_id != 0 + @rental_orders = @rental_orders.joins(:group).where(groups: { group_category_id: group_category_id }) end - render json: fmt(ok, output) + if @rental_orders.count.zero? + render json: fmt(not_found, [], 'Not found rental_orders') + else + render json: fmt(ok, fit_rental_order_index_for_admin_view(@rental_orders)) + end + end - # place_idが指定 - elsif place_id != 0 - @rental_orders.each do |rental_order| - next unless (place_order = rental_order.group.place_order) + # あいまい検索 + def get_search_rental_orders + word = params[:word] + @rental_orders = RentalOrder.preload(:group).map do |rental_order| + rental_order if rental_order.group.name.include?(word) + end.compact + if @rental_orders.count.zero? + render json: fmt(not_found, [], 'Not found rental_orders') + else + render json: fmt(ok, fit_rental_order_index_for_admin_view(@rental_orders)) + end + end - next unless (assign_group_place = place_order.assign_group_place) + # 申請一覧とその未割当 + def get_rental_orders_with_unassigned_num + rental_item_id = params[:rental_item_id].to_i + place_id = params[:place_id].to_i - next unless assign_group_place.place_id == place_id + # rental_item_idが指定なし + if rental_item_id.zero? + @rental_orders = RentalOrder.all - unassigned_num = rental_order.num - AssignRentalItem.where(group_id: rental_order.group_id, - rental_item_id: rental_order.rental_item_id).sum(:num) - temp = { - id: rental_order.id, - group_name: rental_order.group.name, - assign_place: assign_group_place.place.name, - rental_item: rental_order.rental_item.name, - num: rental_order.num, - unassigned_num: unassigned_num - } - output << temp + # rental_item_idが指定 + elsif rental_item_id != 0 + @rental_orders = RentalOrder.where(rental_item_id: rental_item_id) end - if output.length != 0 - render json: fmt(ok, output) + output = [] + if !@rental_orders.empty? + + # place_idが指定なし + if place_id.zero? + @rental_orders.each do |rental_order| + unassigned_num = rental_order.num - AssignRentalItem.where(group_id: rental_order.group_id, + rental_item_id: rental_order.rental_item_id).sum(:num) + assign_place = if (place_order = rental_order.group.place_order) + if (assign_group_place = place_order.assign_group_place) + assign_group_place.place.name + else + 'not yet' + end + else + 'not yet' + end + + temp = { + id: rental_order.id, + group_name: rental_order.group.name, + assign_place: assign_place, + rental_item: rental_order.rental_item.name, + num: rental_order.num, + unassigned_num: unassigned_num + } + output << temp + end + + render json: fmt(ok, output) + + # place_idが指定 + elsif place_id != 0 + @rental_orders.each do |rental_order| + next unless (place_order = rental_order.group.place_order) + + next unless (assign_group_place = place_order.assign_group_place) + + next unless assign_group_place.place_id == place_id + + unassigned_num = rental_order.num - AssignRentalItem.where(group_id: rental_order.group_id, + rental_item_id: rental_order.rental_item_id).sum(:num) + temp = { + id: rental_order.id, + group_name: rental_order.group.name, + assign_place: assign_group_place.place.name, + rental_item: rental_order.rental_item.name, + num: rental_order.num, + unassigned_num: unassigned_num + } + output << temp + end + + if !output.empty? + render json: fmt(ok, output) + else + render json: fmt(not_found, [], 'Not found stocker_items') + end + end else render json: fmt(not_found, [], 'Not found stocker_items') end end - else - render json: fmt(not_found, [], 'Not found stocker_items') end end end diff --git a/api/app/controllers/api/v1/representatives_api_controller.rb b/api/app/controllers/api/v1/representatives_api_controller.rb index edcd0f1b4..926d57610 100644 --- a/api/app/controllers/api/v1/representatives_api_controller.rb +++ b/api/app/controllers/api/v1/representatives_api_controller.rb @@ -1,63 +1,69 @@ -class Api::V1::RepresentativesApiController < ApplicationController - # sub_repがない場合はnilが入ったsub_repみたいなのを返す - @@no_sub_rep = { - id: nil, - name: nil, - department_id: nil, - grade_id: nil, - tel: nil, - email: nil, - created_at: nil, - updated_at: nil, - student_id: nil - } - - def fit_representatives_index_for_admin_view(groups) - groups.map do |group| - { - "user": group.user, - "group": group, - "sub_rep": group.sub_rep.nil? ? @@no_sub_rep : group.sub_rep +# frozen_string_literal: true + +module Api + module V1 + class RepresentativesApiController < ApplicationController + # sub_repがない場合はnilが入ったsub_repみたいなのを返す + @@no_sub_rep = { + id: nil, + name: nil, + department_id: nil, + grade_id: nil, + tel: nil, + email: nil, + created_at: nil, + updated_at: nil, + student_id: nil } - end - end - # 絞り込み機能 - def get_refinement_represantatives - fes_year_id = params[:fes_year_id].to_i - # 指定なし - @groups = if fes_year_id == 0 - Group.all - # fes_year_id指定 - else - Group.where(fes_year_id: fes_year_id) - end - - if @groups.count == 0 - render json: fmt(not_found, [], 'Not found representatives') - else - render json: fmt(ok, fit_representatives_index_for_admin_view(@groups)) - end - end + def fit_representatives_index_for_admin_view(groups) + groups.map do |group| + { + "user": group.user, + "group": group, + "sub_rep": group.sub_rep.nil? ? @@no_sub_rep : group.sub_rep + } + end + end - # あいまい検索の対象かどうか - def is_search_condition(group, word) - # 副代表が存在しない場合 - return group.name.include?(word) || group.user.name.include?(word) if group.sub_rep.nil? + # 絞り込み機能 + def get_refinement_represantatives + fes_year_id = params[:fes_year_id].to_i + # 指定なし + @groups = if fes_year_id.zero? + Group.all + # fes_year_id指定 + else + Group.where(fes_year_id: fes_year_id) + end - # 副代表が存在する場合 + if @groups.count.zero? + render json: fmt(not_found, [], 'Not found representatives') + else + render json: fmt(ok, fit_representatives_index_for_admin_view(@groups)) + end + end - group.name.include?(word) || group.user.name.include?(word) || group.sub_rep.name.include?(word) - end + # あいまい検索の対象かどうか + def is_search_condition(group, word) + # 副代表が存在しない場合 + return group.name.include?(word) || group.user.name.include?(word) if group.sub_rep.nil? + + # 副代表が存在する場合 + + group.name.include?(word) || group.user.name.include?(word) || group.sub_rep.name.include?(word) + end - # あいまい検索機能 - def get_search_representatives - word = params[:word] - @groups = Group.all.map { |group| group if is_search_condition(group, word) }.compact - if @groups.count == 0 - render json: fmt(not_found, [], 'Not found representatives') - else - render json: fmt(ok, fit_representatives_index_for_admin_view(@groups)) + # あいまい検索機能 + def get_search_representatives + word = params[:word] + @groups = Group.all.map { |group| group if is_search_condition(group, word) }.compact + if @groups.count.zero? + render json: fmt(not_found, [], 'Not found representatives') + else + render json: fmt(ok, fit_representatives_index_for_admin_view(@groups)) + end + end end end end diff --git a/api/app/controllers/api/v1/stage_common_options_api_controller.rb b/api/app/controllers/api/v1/stage_common_options_api_controller.rb index 1eb47360f..cce3d3fa9 100644 --- a/api/app/controllers/api/v1/stage_common_options_api_controller.rb +++ b/api/app/controllers/api/v1/stage_common_options_api_controller.rb @@ -1,68 +1,77 @@ -class Api::V1::StageCommonOptionsApiController < ApplicationController - def get_stage_common_option_index_for_admin_view - @stage_common_options = StageCommonOption.with_groups - render json: fmt(ok, @stage_common_options) - end +# frozen_string_literal: true - def get_stage_common_option_show_for_admin_view - @stage_common_option = StageCommonOption.with_group(params[:id]) - render json: fmt(ok, @stage_common_option) - end +module Api + module V1 + class StageCommonOptionsApiController < ApplicationController + def get_stage_common_option_index_for_admin_view + @stage_common_options = StageCommonOption.with_groups + render json: fmt(ok, @stage_common_options) + end - # admin_pageのviewの形に整える - def fit_stage_common_option_index_for_admin_view(stage_common_options) - stage_common_options.map do |stage_common_option| - { - "stage_common_option": stage_common_option, - "group": stage_common_option.group.nil? ? nil : stage_common_option.group - } - end - end + def get_stage_common_option_show_for_admin_view + @stage_common_option = StageCommonOption.with_group(params[:id]) + render json: fmt(ok, @stage_common_option) + end - # 絞り込み機能 - def get_refinement_stage_common_options - fes_year_id = params[:fes_year_id].to_i - own_equipment = params[:own_equipment].to_i - bgm = params[:bgm].to_i - camera_permission = params[:camera_permission].to_i - loud_sound = params[:loud_sound].to_i + # admin_pageのviewの形に整える + def fit_stage_common_option_index_for_admin_view(stage_common_options) + stage_common_options.map do |stage_common_option| + { + "stage_common_option": stage_common_option, + "group": stage_common_option.group.nil? ? nil : stage_common_option.group + } + end + end - # 0: 指定なし(ALL) 1: true 2:false - option_list = [nil, true, false] - @stage_common_options = StageCommonOption.all + # 絞り込み機能 + def get_refinement_stage_common_options + fes_year_id = params[:fes_year_id].to_i + own_equipment = params[:own_equipment].to_i + bgm = params[:bgm].to_i + camera_permission = params[:camera_permission].to_i + loud_sound = params[:loud_sound].to_i - # own_equipment, bgm, camera_permission, loud_soundで絞り込み - if own_equipment != 0 - @stage_common_options = @stage_common_options.where('(own_equipment = ?)', option_list[own_equipment]) - end - @stage_common_options = @stage_common_options.where('(bgm = ?)', option_list[bgm]) if bgm != 0 - if camera_permission != 0 - @stage_common_options = @stage_common_options.where('(camera_permission = ?)', option_list[camera_permission]) - end - @stage_common_options = @stage_common_options.where('(loud_sound = ?)', option_list[loud_sound]) if loud_sound != 0 - if fes_year_id != 0 - @stage_common_options = @stage_common_options.preload(:group).map do |stage_common_option| - stage_common_option if stage_common_option.group.fes_year_id == fes_year_id - end.compact - end + # 0: 指定なし(ALL) 1: true 2:false + option_list = [nil, true, false] + @stage_common_options = StageCommonOption.all - if @stage_common_options.count == 0 - render json: fmt(not_found, [], 'Not found stage_common_options') - else - render json: fmt(ok, fit_stage_common_option_index_for_admin_view(@stage_common_options)) - end - end + # own_equipment, bgm, camera_permission, loud_soundで絞り込み + if own_equipment != 0 + @stage_common_options = @stage_common_options.where('(own_equipment = ?)', option_list[own_equipment]) + end + @stage_common_options = @stage_common_options.where('(bgm = ?)', option_list[bgm]) if bgm != 0 + if camera_permission != 0 + @stage_common_options = @stage_common_options.where('(camera_permission = ?)', option_list[camera_permission]) + end + if loud_sound != 0 + @stage_common_options = @stage_common_options.where('(loud_sound = ?)', + option_list[loud_sound]) + end + if fes_year_id != 0 + @stage_common_options = @stage_common_options.preload(:group).map do |stage_common_option| + stage_common_option if stage_common_option.group.fes_year_id == fes_year_id + end.compact + end + + if @stage_common_options.count.zero? + render json: fmt(not_found, [], 'Not found stage_common_options') + else + render json: fmt(ok, fit_stage_common_option_index_for_admin_view(@stage_common_options)) + end + end - # あいまい検索 - def get_search_stage_common_options - word = params[:word] - @stage_common_options = StageCommonOption.preload(:group).map do |stage_common_option| - stage_common_option if stage_common_option.group.name.include?(word) - end.compact - if @stage_common_options.count == 0 - render json: fmt(not_found, [], 'Not found stage_common_options') - else - render json: fmt(ok, fit_stage_common_option_index_for_admin_view(@stage_common_options)) + # あいまい検索 + def get_search_stage_common_options + word = params[:word] + @stage_common_options = StageCommonOption.preload(:group).map do |stage_common_option| + stage_common_option if stage_common_option.group.name.include?(word) + end.compact + if @stage_common_options.count.zero? + render json: fmt(not_found, [], 'Not found stage_common_options') + else + render json: fmt(ok, fit_stage_common_option_index_for_admin_view(@stage_common_options)) + end + end end end end diff --git a/api/app/controllers/api/v1/stage_orders_api_controller.rb b/api/app/controllers/api/v1/stage_orders_api_controller.rb index 31cd9eec3..70711b6b4 100644 --- a/api/app/controllers/api/v1/stage_orders_api_controller.rb +++ b/api/app/controllers/api/v1/stage_orders_api_controller.rb @@ -1,64 +1,73 @@ -class Api::V1::StageOrdersApiController < ApplicationController - def get_stage_order_index_for_admin_view - @stage_orders = StageOrder.with_groups - render json: fmt(ok, @stage_orders) - end +# frozen_string_literal: true - def get_stage_order_show_for_admin_view - @stage_order = StageOrder.with_group(params[:id]) - render json: fmt(ok, @stage_order) - end +module Api + module V1 + class StageOrdersApiController < ApplicationController + def get_stage_order_index_for_admin_view + @stage_orders = StageOrder.with_groups + render json: fmt(ok, @stage_orders) + end - def fit_stage_order_index_for_admin_view(stage_orders) - stage_orders.map do |stage_order| - { - "stage_order": stage_order, - "stage_order_info": stage_order.to_info_h, - "group": stage_order.group - } - end - end + def get_stage_order_show_for_admin_view + @stage_order = StageOrder.with_group(params[:id]) + render json: fmt(ok, @stage_order) + end - # 絞り込み機能 - def get_refinement_stage_orders - fes_year_id = params[:fes_year_id].to_i - days_num = params[:days_num].to_i - stage_id = params[:stage_id].to_i - is_sunny = params[:is_sunny].to_i - # 晴れ希望 0: 指定なし(ALL) 1: はい 2: いいえ - is_sunny_list = [nil, true, false] + def fit_stage_order_index_for_admin_view(stage_orders) + stage_orders.map do |stage_order| + { + "stage_order": stage_order, + "stage_order_info": stage_order.to_info_h, + "group": stage_order.group + } + end + end - @stage_orders = StageOrder.all + # 絞り込み機能 + def get_refinement_stage_orders + fes_year_id = params[:fes_year_id].to_i + days_num = params[:days_num].to_i + stage_id = params[:stage_id].to_i + is_sunny = params[:is_sunny].to_i + # 晴れ希望 0: 指定なし(ALL) 1: はい 2: いいえ + is_sunny_list = [nil, true, false] - # fes_year_idで絞り込み - @stage_orders = @stage_orders.joins(:group).where(groups: { fes_year_id: fes_year_id }) if fes_year_id != 0 + @stage_orders = StageOrder.all - # days_numで絞り込み - @stage_orders = @stage_orders.joins(:fes_date).where(fes_dates: { days_num: days_num }) if days_num != 0 + # fes_year_idで絞り込み + @stage_orders = @stage_orders.joins(:group).where(groups: { fes_year_id: fes_year_id }) if fes_year_id != 0 - # stage_idで絞り込み - @stage_orders = @stage_orders.where('(stage_first = ?) OR (stage_second = ?)', stage_id, stage_id) if stage_id != 0 + # days_numで絞り込み + @stage_orders = @stage_orders.joins(:fes_date).where(fes_dates: { days_num: days_num }) if days_num != 0 - # is_sunnyで絞り込み - @stage_orders = @stage_orders.where(is_sunny: is_sunny_list[is_sunny]) if is_sunny != 0 + # stage_idで絞り込み + if stage_id != 0 + @stage_orders = @stage_orders.where('(stage_first = ?) OR (stage_second = ?)', stage_id, + stage_id) + end - if @stage_orders.empty? - render json: fmt(not_found, [], 'Not found stage_orders') - else - render json: fmt(ok, fit_stage_order_index_for_admin_view(@stage_orders)) - end - end + # is_sunnyで絞り込み + @stage_orders = @stage_orders.where(is_sunny: is_sunny_list[is_sunny]) if is_sunny != 0 + + if @stage_orders.empty? + render json: fmt(not_found, [], 'Not found stage_orders') + else + render json: fmt(ok, fit_stage_order_index_for_admin_view(@stage_orders)) + end + end - # あいまい検索 - def get_search_stage_orders - word = params[:word] - @stage_orders = StageOrder.preload(:group).map do |stage_order| - stage_order if stage_order.group.name.include?(word) - end.compact - if @stage_orders.count == 0 - render json: fmt(not_found, [], 'Not found stage_orders') - else - render json: fmt(ok, fit_stage_order_index_for_admin_view(@stage_orders)) + # あいまい検索 + def get_search_stage_orders + word = params[:word] + @stage_orders = StageOrder.preload(:group).map do |stage_order| + stage_order if stage_order.group.name.include?(word) + end.compact + if @stage_orders.count.zero? + render json: fmt(not_found, [], 'Not found stage_orders') + else + render json: fmt(ok, fit_stage_order_index_for_admin_view(@stage_orders)) + end + end end end end diff --git a/api/app/controllers/api/v1/stocker_items_api_controller.rb b/api/app/controllers/api/v1/stocker_items_api_controller.rb index b1ef0f4ab..2751279e2 100644 --- a/api/app/controllers/api/v1/stocker_items_api_controller.rb +++ b/api/app/controllers/api/v1/stocker_items_api_controller.rb @@ -1,43 +1,49 @@ -class Api::V1::StockerItemsApiController < ApplicationController - def get_stocker_items_with_remaining_num - rental_item_id = params[:rental_item_id].to_i - stocker_place_id = params[:stocker_place_id].to_i +# frozen_string_literal: true - # 両方ともALL - if rental_item_id == 0 && stocker_place_id == 0 - @stocker_items = StockerItem.all +module Api + module V1 + class StockerItemsApiController < ApplicationController + def get_stocker_items_with_remaining_num + rental_item_id = params[:rental_item_id].to_i + stocker_place_id = params[:stocker_place_id].to_i - # rental_item_idだけ指定 - elsif rental_item_id != 0 && stocker_place_id == 0 - @stocker_items = StockerItem.where(rental_item_id: rental_item_id) + # 両方ともALL + if rental_item_id.zero? && stocker_place_id.zero? + @stocker_items = StockerItem.all - # stocker_place_idだけ指定 - elsif rental_item_id == 0 && stocker_place_id != 0 - @stocker_items = StockerItem.where(stocker_place_id: stocker_place_id) + # rental_item_idだけ指定 + elsif rental_item_id != 0 && stocker_place_id.zero? + @stocker_items = StockerItem.where(rental_item_id: rental_item_id) - # 両方とも指定 - elsif rental_item_id != 0 && stocker_place_id != 0 - @stocker_items = StockerItem.where(rental_item_id: rental_item_id, stocker_place_id: stocker_place_id) - end + # stocker_place_idだけ指定 + elsif rental_item_id.zero? && stocker_place_id != 0 + @stocker_items = StockerItem.where(stocker_place_id: stocker_place_id) + + # 両方とも指定 + elsif rental_item_id != 0 && stocker_place_id != 0 + @stocker_items = StockerItem.where(rental_item_id: rental_item_id, stocker_place_id: stocker_place_id) + end - output = [] - if @stocker_items.length != 0 - @stocker_items.each do |stocker_item| - remaining_num = stocker_item.num - AssignRentalItem.where(rental_item_id: stocker_item.rental_item_id, - stocker_place_id: stocker_item.stocker_place_id).sum(:num) - temp = { - id: stocker_item.id, - fes_year_id: stocker_item.fes_year_id, - rental_item: stocker_item.rental_item.name, - stocker_place: stocker_item.stocker_place.name, - num: stocker_item.num, - remaining_num: remaining_num - } - output << temp + output = [] + if !@stocker_items.empty? + @stocker_items.each do |stocker_item| + remaining_num = stocker_item.num - AssignRentalItem.where(rental_item_id: stocker_item.rental_item_id, + stocker_place_id: stocker_item.stocker_place_id).sum(:num) + temp = { + id: stocker_item.id, + fes_year_id: stocker_item.fes_year_id, + rental_item: stocker_item.rental_item.name, + stocker_place: stocker_item.stocker_place.name, + num: stocker_item.num, + remaining_num: remaining_num + } + output << temp + end + render json: fmt(ok, output) + else + render json: fmt(not_found, [], 'Not found stocker_items') + end end - render json: fmt(ok, output) - else - render json: fmt(not_found, [], 'Not found stocker_items') end end end diff --git a/api/app/controllers/api/v1/sub_rep_api_controller.rb b/api/app/controllers/api/v1/sub_rep_api_controller.rb index 915372de9..c6849f276 100644 --- a/api/app/controllers/api/v1/sub_rep_api_controller.rb +++ b/api/app/controllers/api/v1/sub_rep_api_controller.rb @@ -1,12 +1,18 @@ -class Api::V1::SubRepApiController < ApplicationController - # あいまい検索機能 - def get_search_sub_reps - word = params[:word] - @sub_reps = SubRep.where('name like ? or email like ?', "%#{word}%", "%#{word}%") - if @sub_reps.count == 0 - render json: fmt(not_found, [], 'Not found sub_reps') - else - render json: fmt(ok, @sub_reps) +# frozen_string_literal: true + +module Api + module V1 + class SubRepApiController < ApplicationController + # あいまい検索機能 + def get_search_sub_reps + word = params[:word] + @sub_reps = SubRep.where('name like ? or email like ?', "%#{word}%", "%#{word}%") + if @sub_reps.count.zero? + render json: fmt(not_found, [], 'Not found sub_reps') + else + render json: fmt(ok, @sub_reps) + end + end end end end diff --git a/api/app/controllers/api/v1/users_controller.rb b/api/app/controllers/api/v1/users_controller.rb index 9e182b893..c90c70547 100644 --- a/api/app/controllers/api/v1/users_controller.rb +++ b/api/app/controllers/api/v1/users_controller.rb @@ -1,107 +1,113 @@ -class Api::V1::UsersController < ApplicationController - # before_action :authenticate_api_user! +# frozen_string_literal: true - def get_user_index_for_admin_view - @users = User.with_user_details - render json: fmt(ok, @users) - end +module Api + module V1 + class UsersController < ApplicationController + # before_action :authenticate_api_user! - def get_user_show_for_admin_view - @user = User.with_user_detail(params[:id]) - render json: fmt(ok, @user) - end + def get_user_index_for_admin_view + @users = User.with_user_details + render json: fmt(ok, @users) + end - # 代表者の取得 - def get_representative_index_for_admin_view - @users = User.with_sub_reps - render json: fmt(ok, @users) - end + def get_user_show_for_admin_view + @user = User.with_user_detail(params[:id]) + render json: fmt(ok, @user) + end - def get_representative_show_for_admin_view - @user = User.with_sub_rep(params[:id]) - render json: fmt(ok, @user) - end + # 代表者の取得 + def get_representative_index_for_admin_view + @users = User.with_sub_reps + render json: fmt(ok, @users) + end - # admin_pageのviewの形に整える - def fit_user_index_for_admin_view(users) - users.map do |user| - { - "user": user, - "role": user.role - } - end - end + def get_representative_show_for_admin_view + @user = User.with_sub_rep(params[:id]) + render json: fmt(ok, @user) + end - # 絞り込み機能 - def get_refinement_users - role_id = params[:role_id].to_i - if role_id == 0 - @users = User.all - elsif role_id != 0 - @users = User.where(role_id: role_id) - end + # admin_pageのviewの形に整える + def fit_user_index_for_admin_view(users) + users.map do |user| + { + "user": user, + "role": user.role + } + end + end - if @users.count == 0 - render json: fmt(not_found, [], 'Not found users') - else - render json: fmt(ok, fit_user_index_for_admin_view(@users)) - end - end + # 絞り込み機能 + def get_refinement_users + role_id = params[:role_id].to_i + if role_id.zero? + @users = User.all + elsif role_id != 0 + @users = User.where(role_id: role_id) + end - # あいまい検索機能 - def get_search_users - word = params[:word] - @users = User.where('name like ? or email like ?', "%#{word}%", "%#{word}%") - if @users.count == 0 - render json: fmt(not_found, [], 'Not found groups') - else - render json: fmt(ok, fit_user_index_for_admin_view(@users)) - end - end + if @users.count.zero? + render json: fmt(not_found, [], 'Not found users') + else + render json: fmt(ok, fit_user_index_for_admin_view(@users)) + end + end - # 現在のログインしているユーザーを返す - # TODO: このコントローラーはフロントが整備され次第変更する - def show - @user = current_api_user - render json: fmt(ok, @user) - end + # あいまい検索機能 + def get_search_users + word = params[:word] + @users = User.where('name like ? or email like ?', "%#{word}%", "%#{word}%") + if @users.count.zero? + render json: fmt(not_found, [], 'Not found groups') + else + render json: fmt(ok, fit_user_index_for_admin_view(@users)) + end + end - ### これ使ってる? - def update - @user = User.find(params[:id]) - role_id = params[:role_id] - @user.update(role_id: role_id) - render json: @user - end + # 現在のログインしているユーザーを返す + # TODO: このコントローラーはフロントが整備され次第変更する + def show + @user = current_api_user + render json: fmt(ok, @user) + end - def edit_user_info - @user = User.find(edit_user_info_params[:user_id]) - @user_detail = @user.user_detail - @user.name = edit_user_info_params[:name] - @user.email = edit_user_info_params[:email] - @user_detail.student_id = edit_user_info_params[:student_id] - @user_detail.grade_id = edit_user_info_params[:grade_id] - @user_detail.department_id = edit_user_info_params[:department_id] - @user_detail.tel = edit_user_info_params[:tel] - @user.save! - @user_detail.save! - end + ### これ使ってる? + def update + @user = User.find(params[:id]) + role_id = params[:role_id] + @user.update(role_id: role_id) + render json: @user + end - def reset_password - @user = User.find(reset_password_params[:user_id]) - @user.password = reset_password_params[:password] - @user.password_confirmation = reset_password_params[:password_confirmation] - @user.save! - render json: fmt(ok, [], 'Updated password user_id = ' + params[:user_id]) - end + def edit_user_info + @user = User.find(edit_user_info_params[:user_id]) + @user_detail = @user.user_detail + @user.name = edit_user_info_params[:name] + @user.email = edit_user_info_params[:email] + @user_detail.student_id = edit_user_info_params[:student_id] + @user_detail.grade_id = edit_user_info_params[:grade_id] + @user_detail.department_id = edit_user_info_params[:department_id] + @user_detail.tel = edit_user_info_params[:tel] + @user.save! + @user_detail.save! + end - private + def reset_password + @user = User.find(reset_password_params[:user_id]) + @user.password = reset_password_params[:password] + @user.password_confirmation = reset_password_params[:password_confirmation] + @user.save! + render json: fmt(ok, [], "Updated password user_id = #{params[:user_id]}") + end - def edit_user_info_params - params.permit(:user_id, :name, :student_id, :grade_id, :department_id, :tel, :email) - end + private - def reset_password_params - params.permit(:user_id, :password, :password_confirmation) + def edit_user_info_params + params.permit(:user_id, :name, :student_id, :grade_id, :department_id, :tel, :email) + end + + def reset_password_params + params.permit(:user_id, :password, :password_confirmation) + end + end end end diff --git a/api/app/controllers/api/v1/venue_maps_api_controller.rb b/api/app/controllers/api/v1/venue_maps_api_controller.rb index 757ce1107..a9fe2c0ec 100644 --- a/api/app/controllers/api/v1/venue_maps_api_controller.rb +++ b/api/app/controllers/api/v1/venue_maps_api_controller.rb @@ -1,46 +1,52 @@ -class Api::V1::VenueMapsApiController < ApplicationController - def get_venue_map_for_admin_view - @groups = Group.with_venue_map(params[:id]) - render json: fmt(ok, @groups) - end +# frozen_string_literal: true - # admin_viewのvenue_map/indexの形に整える - def fit_group_index_for_admin_view(groups) - groups.map do |group| - { - "group": group, - "group_category": group.group_category, - "fes_year": group.fes_year - } - end - end +module Api + module V1 + class VenueMapsApiController < ApplicationController + def get_venue_map_for_admin_view + @groups = Group.with_venue_map(params[:id]) + render json: fmt(ok, @groups) + end - # 絞り込み機能 - def get_refinement_venue_maps - fes_year_id = params[:fes_year_id].to_i - # 両方ともALL - if fes_year_id == 0 - @groups = Group.with_venue_maps - # fes_year_idだけ指定 - elsif fes_year_id != 0 - @groups = Group.with_venue_map_narrow_down_by_fes_year(fes_year_id) - end + # admin_viewのvenue_map/indexの形に整える + def fit_group_index_for_admin_view(groups) + groups.map do |group| + { + "group": group, + "group_category": group.group_category, + "fes_year": group.fes_year + } + end + end - if @groups.count == 0 - render json: fmt(not_found, [], 'Not found groups') - else - render json: fmt(ok, @groups) - end - end + # 絞り込み機能 + def get_refinement_venue_maps + fes_year_id = params[:fes_year_id].to_i + # 両方ともALL + if fes_year_id.zero? + @groups = Group.with_venue_maps + # fes_year_idだけ指定 + elsif fes_year_id != 0 + @groups = Group.with_venue_map_narrow_down_by_fes_year(fes_year_id) + end + + if @groups.count.zero? + render json: fmt(not_found, [], 'Not found groups') + else + render json: fmt(ok, @groups) + end + end - # あいまい検索機能 - def get_search_venue_maps - word = params[:word] - @groups = Group.with_venue_map_narrow_down_by_search_word(word) - if @groups.count == 0 - render json: fmt(not_found, [], 'Not found groups') - else - render json: fmt(ok, @groups) + # あいまい検索機能 + def get_search_venue_maps + word = params[:word] + @groups = Group.with_venue_map_narrow_down_by_search_word(word) + if @groups.count.zero? + render json: fmt(not_found, [], 'Not found groups') + else + render json: fmt(ok, @groups) + end + end end end end diff --git a/api/app/controllers/application_controller.rb b/api/app/controllers/application_controller.rb index f074107b3..20554b17b 100644 --- a/api/app/controllers/application_controller.rb +++ b/api/app/controllers/application_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class ApplicationController < ActionController::API include DeviseTokenAuth::Concerns::SetUserByToken diff --git a/api/app/controllers/assign_group_places_controller.rb b/api/app/controllers/assign_group_places_controller.rb index f6cdee57f..608cf9f71 100644 --- a/api/app/controllers/assign_group_places_controller.rb +++ b/api/app/controllers/assign_group_places_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AssignGroupPlacesController < ApplicationController before_action :set_assign_group_place, only: %i[show update destroy] @@ -25,14 +27,14 @@ def create # PATCH/PUT /assign_group_places/1.json def update @assign_group_place.update(assign_group_place_params) - render json: fmt(created, @assign_group_place, 'Updated assign_group_place id = ' + params[:id]) + render json: fmt(created, @assign_group_place, "Updated assign_group_place id = #{params[:id]}") end # DELETE /assign_group_places/1 # DELETE /assign_group_places/1.json def destroy @assign_group_place.destroy - render json: fmt(ok, [], 'Deleted assign_group_place = ' + params[:id]) + render json: fmt(ok, [], "Deleted assign_group_place = #{params[:id]}") end private @@ -42,7 +44,7 @@ def set_assign_group_place if AssignGroupPlace.exists?(params[:id]) @assign_group_place = AssignGroupPlace.find(params[:id]) else - render json: fmt(not_found, [], 'Not found assign_group_place = ' + params[:id]) + render json: fmt(not_found, [], "Not found assign_group_place = #{params[:id]}") end end diff --git a/api/app/controllers/assign_rental_items_controller.rb b/api/app/controllers/assign_rental_items_controller.rb index c0243aa10..d18ffa656 100644 --- a/api/app/controllers/assign_rental_items_controller.rb +++ b/api/app/controllers/assign_rental_items_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AssignRentalItemsController < ApplicationController before_action :set_assign_rental_item, only: %i[show update destroy] @@ -36,14 +38,14 @@ def create # PATCH/PUT /assign_rental_items/1.json def update @assign_rental_item.update(assign_rental_item_params) - render json: fmt(created, @assign_rental_item, 'Updated assign_rental_item id = ' + params[:id]) + render json: fmt(created, @assign_rental_item, "Updated assign_rental_item id = #{params[:id]}") end # DELETE /assign_rental_items/1 # DELETE /assign_rental_items/1.json def destroy @assign_rental_item.destroy - render json: fmt(ok, [], 'Deleted assign_rental_item = ' + params[:id]) + render json: fmt(ok, [], "Deleted assign_rental_item = #{params[:id]}") end private @@ -53,7 +55,7 @@ def set_assign_rental_item if AssignRentalItem.exists?(params[:id]) @assign_rental_item = AssignRentalItem.find(params[:id]) else - render json: fmt(not_found, [], 'Not found assign_rental_item = ' + params[:id]) + render json: fmt(not_found, [], "Not found assign_rental_item = #{params[:id]}") end end diff --git a/api/app/controllers/assign_stages_controller.rb b/api/app/controllers/assign_stages_controller.rb index 8ac6b683f..d710f08a0 100644 --- a/api/app/controllers/assign_stages_controller.rb +++ b/api/app/controllers/assign_stages_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AssignStagesController < ApplicationController before_action :set_assign_stage, only: %i[show update destroy] @@ -25,14 +27,14 @@ def create # PATCH/PUT /assign_stages/1.json def update @assign_stage.update(assign_stage_params) - render json: fmt(created, @assign_stage, 'Updated assign_stage id = ' + params[:id]) + render json: fmt(created, @assign_stage, "Updated assign_stage id = #{params[:id]}") end # DELETE /assign_stages/1 # DELETE /assign_stages/1.json def destroy @assign_stage.destroy - render json: fmt(ok, [], 'Deleted assign_stage = ' + params[:id]) + render json: fmt(ok, [], "Deleted assign_stage = #{params[:id]}") end private @@ -42,7 +44,7 @@ def set_assign_stage if AssignStage.exists?(params[:id]) @assign_stage = AssignStage.find(params[:id]) else - render json: fmt(not_found, [], 'Not found assign_stage = ' + params[:id]) + render json: fmt(not_found, [], "Not found assign_stage = #{params[:id]}") end end diff --git a/api/app/controllers/contact_persons_controller.rb b/api/app/controllers/contact_persons_controller.rb index 56338fe53..bbe0b2455 100644 --- a/api/app/controllers/contact_persons_controller.rb +++ b/api/app/controllers/contact_persons_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class ContactPersonsController < ApplicationController before_action :set_contact_person, only: %i[show update destroy] diff --git a/api/app/controllers/cooking_process_orders_controller.rb b/api/app/controllers/cooking_process_orders_controller.rb index ff363a0ad..cc05fd769 100644 --- a/api/app/controllers/cooking_process_orders_controller.rb +++ b/api/app/controllers/cooking_process_orders_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CookingProcessOrdersController < ApplicationController before_action :set_cooking_process_order, only: %i[show update destroy] @@ -26,13 +28,13 @@ def create # PATCH/PUT /cooking_process_orders/1 def update @cooking_process_order.update(cooking_process_order_params) - render json: fmt(created, @cooking_process_order, 'Updated cooking process order id = ' + params[:id]) + render json: fmt(created, @cooking_process_order, "Updated cooking process order id = #{params[:id]}") end # DELETE /cooking_process_orders/1 def destroy @cooking_process_order.destroy - render json: fmt(ok, [], 'Deleted cooking process order id = ' + params[:id]) + render json: fmt(ok, [], "Deleted cooking process order id = #{params[:id]}") end private diff --git a/api/app/controllers/current_stocks_controller.rb b/api/app/controllers/current_stocks_controller.rb index 216384dc8..e514b4de2 100644 --- a/api/app/controllers/current_stocks_controller.rb +++ b/api/app/controllers/current_stocks_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CurrentStocksController < ApplicationController before_action :set_current_stock, only: %i[show update destroy] @@ -25,14 +27,14 @@ def create # PATCH/PUT /current_stocks/1.json def update @current_stock.update(current_stock_params) - render json: fmt(created, @current_stock, 'Updated current_stock id = ' + params[:id]) + render json: fmt(created, @current_stock, "Updated current_stock id = #{params[:id]}") end # DELETE /current_stocks/1 # DELETE /current_stocks/1.json def destroy @current_stock.destroy - render json: fmt(ok, [], 'Deleted current_stock id = ' + params[:id]) + render json: fmt(ok, [], "Deleted current_stock id = #{params[:id]}") end private @@ -42,7 +44,7 @@ def set_current_stock if CurrentStock.exists?(params[:id]) @current_stock = CurrentStock.find(params[:id]) else - render json: fmt(not_found, [], 'Not found current_stock id = ' + params[:id]) + render json: fmt(not_found, [], "Not found current_stock id = #{params[:id]}") end end diff --git a/api/app/controllers/employees_controller.rb b/api/app/controllers/employees_controller.rb index 71b506680..2c4ce6980 100644 --- a/api/app/controllers/employees_controller.rb +++ b/api/app/controllers/employees_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class EmployeesController < ApplicationController before_action :set_employee, only: %i[show update destroy] @@ -25,14 +27,14 @@ def create # PATCH/PUT /employees/1.json def update @employee.update(employee_params) - render json: fmt(created, @employee, 'Updated employee id = ' + params[:id]) + render json: fmt(created, @employee, "Updated employee id = #{params[:id]}") end # DELETE /employees/1 # DELETE /employees/1.json def destroy @employee.destroy - render json: fmt(ok, [], 'Deleted employee = ' + params[:id]) + render json: fmt(ok, [], "Deleted employee = #{params[:id]}") end private @@ -42,7 +44,7 @@ def set_employee if Employee.exists?(params[:id]) @employee = Employee.find(params[:id]) else - render json: fmt(not_found, [], 'Not found employee = ' + params[:id]) + render json: fmt(not_found, [], "Not found employee = #{params[:id]}") end end diff --git a/api/app/controllers/fes_dates_controller.rb b/api/app/controllers/fes_dates_controller.rb index cd53c4c15..8d45fba0a 100644 --- a/api/app/controllers/fes_dates_controller.rb +++ b/api/app/controllers/fes_dates_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class FesDatesController < ApplicationController before_action :set_fes_date, only: %i[show update destroy] @@ -27,12 +29,12 @@ def create def update @fes_date.update(fes_date_params) - render json: fmt(created, @fes_date, 'Updated fes_date id = ' + params[:id]) + render json: fmt(created, @fes_date, "Updated fes_date id = #{params[:id]}") end def destroy @fes_date.destroy - render json: fmt(ok, [], 'Deleted fes_date = ' + params[:id]) + render json: fmt(ok, [], "Deleted fes_date = #{params[:id]}") end private @@ -42,7 +44,7 @@ def set_fes_date if FesDate.exists?(params[:id]) @fes_date = FesDate.find(params[:id]) else - render json: fmt(not_found, [], 'Not found fes_date = ' + params[:id]) + render json: fmt(not_found, [], "Not found fes_date = #{params[:id]}") end end diff --git a/api/app/controllers/fes_years_controller.rb b/api/app/controllers/fes_years_controller.rb index bc7a29a7d..17ff964b5 100644 --- a/api/app/controllers/fes_years_controller.rb +++ b/api/app/controllers/fes_years_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class FesYearsController < ApplicationController before_action :set_fes_year, only: %i[show update destroy] @@ -22,7 +24,7 @@ def update def destroy @fes_year.destroy - render json: fmt(ok, [], 'Deleted fes_year = ' + params[:id]) + render json: fmt(ok, [], "Deleted fes_year = #{params[:id]}") end private @@ -32,7 +34,7 @@ def set_fes_year if FesYear.exists?(params[:id]) @fes_year = FesYear.find(params[:id]) else - render json: fmt(not_found, [], 'Not found fes_year = ' + params[:id]) + render json: fmt(not_found, [], "Not found fes_year = #{params[:id]}") end end diff --git a/api/app/controllers/food_products_controller.rb b/api/app/controllers/food_products_controller.rb index 825cb7ac8..c1779e69b 100644 --- a/api/app/controllers/food_products_controller.rb +++ b/api/app/controllers/food_products_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class FoodProductsController < ApplicationController before_action :set_food_product, only: %i[show update destroy] @@ -25,14 +27,14 @@ def create # PATCH/PUT /food_products/1.json def update @food_product.update(food_product_params) - render json: fmt(created, @food_product, 'Updated food_product id = ' + params[:id]) + render json: fmt(created, @food_product, "Updated food_product id = #{params[:id]}") end # DELETE /food_products/1 # DELETE /food_products/1.json def destroy @food_product.destroy - render json: fmt(ok, [], 'Deleted food_product = ' + params[:id]) + render json: fmt(ok, [], "Deleted food_product = #{params[:id]}") end private @@ -42,7 +44,7 @@ def set_food_product if FoodProduct.exists?(params[:id]) @food_product = FoodProduct.find(params[:id]) else - render json: fmt(not_found, [], 'Not found food_product = ' + params[:id]) + render json: fmt(not_found, [], "Not found food_product = #{params[:id]}") end end diff --git a/api/app/controllers/group_categories_controller.rb b/api/app/controllers/group_categories_controller.rb index e4f8e4723..755a4171e 100644 --- a/api/app/controllers/group_categories_controller.rb +++ b/api/app/controllers/group_categories_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class GroupCategoriesController < ApplicationController before_action :set_group_category, only: %i[show update destroy] @@ -17,12 +19,12 @@ def create def update @group.update(group_category_params) - render json: fmt(created, @group_category, 'Updated group_category id = ' + params[:id]) + render json: fmt(created, @group_category, "Updated group_category id = #{params[:id]}") end def destroy @group_category.destroy - render json: fmt(ok, [], 'Deleted group_category = ' + params[:id]) + render json: fmt(ok, [], "Deleted group_category = #{params[:id]}") end private @@ -32,7 +34,7 @@ def set_group_category if GroupCategory.exists?(params[:id]) @group_category = GroupCategory.find(params[:id]) else - render json: fmt(not_found, [], 'Not found group_category = ' + params[:id]) + render json: fmt(not_found, [], "Not found group_category = #{params[:id]}") end end diff --git a/api/app/controllers/group_identification_controller.rb b/api/app/controllers/group_identification_controller.rb index e40101616..982d69965 100644 --- a/api/app/controllers/group_identification_controller.rb +++ b/api/app/controllers/group_identification_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class GroupIdentificationController < ApplicationController before_action :set_group_identification, only: %i[update destroy] @@ -14,7 +16,7 @@ def index @group_identifications = @groups.map do |group| { - "id": group.group_identification.nil? ? nil : group.group_identification.id, + "id": group.group_identification&.id, "group_id": group.id, "name": group.name, "group_category_id": group.group_category.id, @@ -22,8 +24,8 @@ def index "number": group.number.nil? ? nil : group.number, "place": group.place.nil? ? nil : group.place, "stage": group.stage.nil? ? nil : group.stage, - "created_at": group.group_identification.nil? ? nil : group.group_identification.created_at, - "updated_at": group.group_identification.nil? ? nil : group.group_identification.updated_at + "created_at": group.group_identification&.created_at, + "updated_at": group.group_identification&.updated_at } end @@ -37,12 +39,12 @@ def create def update @group_identification.update(group_identification_params) - render json: fmt(ok, @group_identification, 'Updated group_identification id = ' + params[:id]) + render json: fmt(ok, @group_identification, "Updated group_identification id = #{params[:id]}") end def destroy @group_identification.destroy - render json: fmt(ok, [], 'Deleted group_identification id = ' + params[:id]) + render json: fmt(ok, [], "Deleted group_identification id = #{params[:id]}") end private @@ -51,7 +53,7 @@ def set_group_identification if GroupIdentification.exists?(params[:id]) @group_identification = GroupIdentification.find(params[:id]) else - render json: fmt(not_found, [], 'Not found group_identification = ' + params[:id]) + render json: fmt(not_found, [], "Not found group_identification = #{params[:id]}") end end diff --git a/api/app/controllers/groups_controller.rb b/api/app/controllers/groups_controller.rb index 2bebab87a..24446fca0 100644 --- a/api/app/controllers/groups_controller.rb +++ b/api/app/controllers/groups_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class GroupsController < ApplicationController before_action :set_group, only: %i[show update destroy] @@ -23,7 +25,7 @@ def create client = Slack::Web::Client.new client.chat_postMessage( token: ENV['BOT_USER_ACCESS_TOKEN'], - channel: '#' + ENV['CHANNEL'], + channel: "##{ENV['CHANNEL']}", text: " 参加団体「#{@group.name}」が追加されました @@ -45,12 +47,12 @@ def create # PATCH/PUT /groups/1.json def update @group.update(group_params) - render json: fmt(created, @group, 'Updated group id = ' + params[:id]) + render json: fmt(created, @group, "Updated group id = #{params[:id]}") client = Slack::Web::Client.new client.chat_postMessage( token: ENV['BOT_USER_ACCESS_TOKEN'], - channel: '#' + ENV['CHANNEL'], + channel: "##{ENV['CHANNEL']}", text: " 参加団体「#{@group.name}」が編集されました @@ -72,12 +74,12 @@ def update # DELETE /groups/1.json def destroy @group.destroy - render json: fmt(ok, [], 'Deleted group id = ' + params[:id]) + render json: fmt(ok, [], "Deleted group id = #{params[:id]}") client = Slack::Web::Client.new client.chat_postMessage( token: ENV['BOT_USER_ACCESS_TOKEN'], - channel: '#' + ENV['CHANNEL'], + channel: "##{ENV['CHANNEL']}", text: " 参加団体「#{@group.name}」が削除されました @@ -104,7 +106,7 @@ def set_group @group = Group.find(params[:id]) else # なければnot found - render json: fmt(not_found, [], 'Not found group id = ' + params[:id]) + render json: fmt(not_found, [], "Not found group id = #{params[:id]}") end end diff --git a/api/app/controllers/memos_controller.rb b/api/app/controllers/memos_controller.rb index d0f4d8dde..3925d6caf 100644 --- a/api/app/controllers/memos_controller.rb +++ b/api/app/controllers/memos_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class MemosController < ApplicationController before_action :set_memo, only: %i[show update destroy] @@ -38,7 +40,7 @@ def update @memo.update(memo_params) @memos = Memo.all.order(id: 'DESC') memo_list = [] - for memo in @memos + @memos.each do |memo| user = memo.user.name memo_list << { memo: memo, @@ -53,7 +55,7 @@ def update # DELETE /memos/1.json def destroy @memo.destroy - render json: fmt(ok, [], 'Deleted memo = ' + params[:id]) + render json: fmt(ok, [], "Deleted memo = #{params[:id]}") end private @@ -63,7 +65,7 @@ def set_memo if Memo.exists?(params[:id]) @memo = Memo.find(params[:id]) else - render json: fmt(not_found, [], 'Not found memo = ' + params[:id]) + render json: fmt(not_found, [], "Not found memo = #{params[:id]}") end end diff --git a/api/app/controllers/news_controller.rb b/api/app/controllers/news_controller.rb index 76e4989dd..23f1e47c8 100644 --- a/api/app/controllers/news_controller.rb +++ b/api/app/controllers/news_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class NewsController < ApplicationController before_action :set_news, only: %i[show update destroy] @@ -25,14 +27,14 @@ def create # PATCH/PUT /news/1.json def update @news.update(news_params) - render json: fmt(created, @news, 'Updated news id = ' + params[:id]) + render json: fmt(created, @news, "Updated news id = #{params[:id]}") end # DELETE /news/1 # DELETE /news/1.json def destroy @news.destroy - render json: fmt(ok, [], 'Deleted news = ' + params[:id]) + render json: fmt(ok, [], "Deleted news = #{params[:id]}") end private @@ -42,7 +44,7 @@ def set_news if News.exists?(params[:id]) @news = News.find(params[:id]) else - render json: fmt(not_found, [], 'Not found news = ' + params[:id]) + render json: fmt(not_found, [], "Not found news = #{params[:id]}") end end diff --git a/api/app/controllers/place_allow_lists_controller.rb b/api/app/controllers/place_allow_lists_controller.rb index 3349198ee..8d7243706 100644 --- a/api/app/controllers/place_allow_lists_controller.rb +++ b/api/app/controllers/place_allow_lists_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class PlaceAllowListsController < ApplicationController before_action :set_place_allow_list, only: %i[show update destroy] @@ -25,14 +27,14 @@ def create # PATCH/PUT /place_allow_lists/1.json def update @place_allow_list.update(place_allow_list_params) - render json: fmt(created, @place_allow_list, 'Updated place_allow_list id = ' + params[:id]) + render json: fmt(created, @place_allow_list, "Updated place_allow_list id = #{params[:id]}") end # DELETE /place_allow_lists/1 # DELETE /place_allow_lists/1.json def destroy @place_allow_list.destroy - render json: fmt(ok, [], 'Deleted place_allow_list = ' + params[:id]) + render json: fmt(ok, [], "Deleted place_allow_list = #{params[:id]}") end private @@ -42,7 +44,7 @@ def set_place_allow_list if PlaceAllowList.exists?(params[:id]) @place_allow_list = PlaceAllowList.find(params[:id]) else - render json: fmt(not_found, [], 'Not found place_allow_list = ' + params[:id]) + render json: fmt(not_found, [], "Not found place_allow_list = #{params[:id]}") end end diff --git a/api/app/controllers/place_number_controller.rb b/api/app/controllers/place_number_controller.rb index b75e6d0a5..7789d23d0 100644 --- a/api/app/controllers/place_number_controller.rb +++ b/api/app/controllers/place_number_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class PlaceNumberController < ApplicationController before_action :set_place_number, only: %i[show update destroy] @@ -13,10 +15,10 @@ def index else place.place_numbers.map do |place_number| { - "group_identification_id": place_number.group_identification.nil? ? nil : place_number.group_identification.id, + "group_identification_id": place_number.group_identification&.id, "place_number": place_number.nil? ? nil : place_number, - "num": place_number.group_identification.nil? ? nil : place_number.group_identification.number, - "group": place_number.group_identification.nil? ? nil : place_number.group_identification.group + "num": place_number.group_identification&.number, + "group": place_number.group_identification&.group } end end @@ -32,12 +34,12 @@ def create def update @place_number.update(place_number_params) - render json: fmt(ok, @place_number, 'Updated place_number id =' + params[:id]) + render json: fmt(ok, @place_number, "Updated place_number id =#{params[:id]}") end def destroy @place_number.destroy - render json: fmt(ok, [], 'Deleted place_number id =' + params[:id]) + render json: fmt(ok, [], "Deleted place_number id =#{params[:id]}") end private @@ -46,7 +48,7 @@ def set_place_number if PlaceNumber.exists?(params[:id]) @place_number = PlaceNumber.find(params[:id]) else - render json: fmt(not_found, [], 'Not found place_number id = ' + params[:id]) + render json: fmt(not_found, [], "Not found place_number id = #{params[:id]}") end end diff --git a/api/app/controllers/place_orders_controller.rb b/api/app/controllers/place_orders_controller.rb index 869496ce9..9efd6f1b5 100644 --- a/api/app/controllers/place_orders_controller.rb +++ b/api/app/controllers/place_orders_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class PlaceOrdersController < ApplicationController before_action :set_place_order, only: %i[show update destroy] @@ -25,14 +27,14 @@ def create # PATCH/PUT /place_orders/1.json def update @place_order.update(place_order_params) - render json: fmt(created, @place_order, 'Updated place_order id = ' + params[:id]) + render json: fmt(created, @place_order, "Updated place_order id = #{params[:id]}") end # DELETE /place_orders/1 # DELETE /place_orders/1.json def destroy @place_order.destroy - render json: fmt(ok, [], 'Deletd place_order = ' + params[:id]) + render json: fmt(ok, [], "Deletd place_order = #{params[:id]}") end private @@ -42,7 +44,7 @@ def set_place_order if PlaceOrder.exists?(params[:id]) @place_order = PlaceOrder.find(params[:id]) else - render json: fmt(not_found, [], 'Not found place_order = ' + params[:id]) + render json: fmt(not_found, [], "Not found place_order = #{params[:id]}") end end diff --git a/api/app/controllers/places_controller.rb b/api/app/controllers/places_controller.rb index 0ab74339e..edf3489c1 100644 --- a/api/app/controllers/places_controller.rb +++ b/api/app/controllers/places_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class PlacesController < ApplicationController before_action :set_place, only: %i[show update destroy] @@ -17,14 +19,14 @@ def create def update @place.update(place_params) - render json: fmt(created, @place, 'Updated place id = ' + params[:id]) + render json: fmt(created, @place, "Updated place id = #{params[:id]}") end # DELETE /place_orders/1 # DELETE /place_orders/1.json def destroy @place.destroy - render json: fmt(ok, [], 'Deleted place = ' + params[:id]) + render json: fmt(ok, [], "Deleted place = #{params[:id]}") end private @@ -34,7 +36,7 @@ def set_place if Place.exists?(params[:id]) @place = Place.find(params[:id]) else - render json: fmt(not_found, [], 'Not found place = ' + params[:id]) + render json: fmt(not_found, [], "Not found place = #{params[:id]}") end end diff --git a/api/app/controllers/power_orders_controller.rb b/api/app/controllers/power_orders_controller.rb index 4a6ae7e11..820ea57c7 100644 --- a/api/app/controllers/power_orders_controller.rb +++ b/api/app/controllers/power_orders_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class PowerOrdersController < ApplicationController before_action :set_power_order, only: %i[show update destroy] @@ -25,14 +27,14 @@ def create # PATCH/PUT /power_orders/1.json def update @power_order.update(power_order_params) - render json: fmt(created, @power_order, 'Updated power_order id = ' + params[:id]) + render json: fmt(created, @power_order, "Updated power_order id = #{params[:id]}") end # DELETE /power_orders/1 # DELETE /power_orders/1.json def destroy @power_order.destroy - render json: fmt(ok, [], 'Deleted power_order = ' + params[:id]) + render json: fmt(ok, [], "Deleted power_order = #{params[:id]}") end private @@ -42,7 +44,7 @@ def set_power_order if PowerOrder.exists?(params[:id]) @power_order = PowerOrder.find(params[:id]) else - render json: fmt(not_found, [], 'Not found power_order = ' + params[:id]) + render json: fmt(not_found, [], "Not found power_order = #{params[:id]}") end end diff --git a/api/app/controllers/print_pdf_controller.rb b/api/app/controllers/print_pdf_controller.rb index 37eb8fd27..a48540809 100644 --- a/api/app/controllers/print_pdf_controller.rb +++ b/api/app/controllers/print_pdf_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class PrintPdfController < ApplicationController include ActionController::MimeResponds @@ -92,7 +94,7 @@ def output_groups_with_categories(template_name, style_name, output_file_name, t if Group.where(fes_year_id: params[:fes_year_id]).exists? @groups = Group.where(fes_year_id: params[:fes_year_id]) @catgories = [] - for i in 1..6 do + (1..6).each do |i| group = Group.where(fes_year_id: params[:fes_year_id]).where(group_category_id: i) @catgories << group end diff --git a/api/app/controllers/public_relations_controller.rb b/api/app/controllers/public_relations_controller.rb index 96f274370..c38e930c0 100644 --- a/api/app/controllers/public_relations_controller.rb +++ b/api/app/controllers/public_relations_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class PublicRelationsController < ApplicationController before_action :set_public_relation, only: %i[show update destroy] @@ -17,12 +19,12 @@ def create def update @public_relation.update(public_relation_params) - render json: fmt(created, @public_relation, 'Updated public_relation id = ' + params[:id]) + render json: fmt(created, @public_relation, "Updated public_relation id = #{params[:id]}") end def destroy @public_relation.destroy - render json: fmt(ok, [], 'Deleted public_relation = ' + params[:id]) + render json: fmt(ok, [], "Deleted public_relation = #{params[:id]}") end private @@ -32,7 +34,7 @@ def set_public_relation if PublicRelation.exists?(params[:id]) @public_relation = PublicRelation.find(params[:id]) else - render json: fmt(not_found, [], 'Not found public_relation = ' + params[:id]) + render json: fmt(not_found, [], "Not found public_relation = #{params[:id]}") end end diff --git a/api/app/controllers/purchase_lists_controller.rb b/api/app/controllers/purchase_lists_controller.rb index 38b090a67..27a243568 100644 --- a/api/app/controllers/purchase_lists_controller.rb +++ b/api/app/controllers/purchase_lists_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class PurchaseListsController < ApplicationController before_action :set_purchase_list, only: %i[show update destroy] @@ -25,14 +27,14 @@ def create # PATCH/PUT /purchase_lists/1.json def update @purchase_list.update(purchase_list_params) - render json: fmt(created, @purchase_list, 'Updated purchase_list id = ' + params[:id]) + render json: fmt(created, @purchase_list, "Updated purchase_list id = #{params[:id]}") end # DELETE /purchase_lists/1 # DELETE /purchase_lists/1.json def destroy @purchase_list.destroy - render json: fmt(ok, [], 'Deleted purchase_list = ' + params[:id]) + render json: fmt(ok, [], "Deleted purchase_list = #{params[:id]}") end private @@ -42,7 +44,7 @@ def set_purchase_list if PurchaseList.exists?(params[:id]) @purchase_list = PurchaseList.find(params[:id]) else - render json: fmt(not_found, [], 'Not found purhase_list = ' + params[:id]) + render json: fmt(not_found, [], "Not found purhase_list = #{params[:id]}") end end diff --git a/api/app/controllers/rentable_items_controller.rb b/api/app/controllers/rentable_items_controller.rb index f33f817a0..0105627a5 100644 --- a/api/app/controllers/rentable_items_controller.rb +++ b/api/app/controllers/rentable_items_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class RentableItemsController < ApplicationController before_action :set_rentable_item, only: %i[show update destroy] @@ -25,14 +27,14 @@ def create # PATCH/PUT /rentable_items/1.json def update @rentable_item.update(rentable_item_params) - render json: fmt(created, @rentable_item, 'Updated rentable_item id = ' + params[:id]) + render json: fmt(created, @rentable_item, "Updated rentable_item id = #{params[:id]}") end # DELETE /rentable_items/1 # DELETE /rentable_items/1.json def destroy @rentable_item.destroy - render json: fmt(ok, [], 'Deleted rentable_item = ' + params[:id]) + render json: fmt(ok, [], "Deleted rentable_item = #{params[:id]}") end private @@ -42,7 +44,7 @@ def set_rentable_item if RentableItem.exists?(params[:id]) @rentable_item = RentableItem.find(params[:id]) else - render json: fmt(not_found, [], 'Not found rentable_item = ' + params[:id]) + render json: fmt(not_found, [], "Not found rentable_item = #{params[:id]}") end end diff --git a/api/app/controllers/rental_item_allow_lists_controller.rb b/api/app/controllers/rental_item_allow_lists_controller.rb index 25e123899..3f7e9f9fc 100644 --- a/api/app/controllers/rental_item_allow_lists_controller.rb +++ b/api/app/controllers/rental_item_allow_lists_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class RentalItemAllowListsController < ApplicationController before_action :set_rental_item_allow_list, only: %i[show update destroy] @@ -17,12 +19,12 @@ def create def update @rental_item_allow_list.update(rental_item_allow_list_params) - render json: fmt(created, @rental_item_allow_list, 'Updated rental_item_allow_list id = ' + params[:id]) + render json: fmt(created, @rental_item_allow_list, "Updated rental_item_allow_list id = #{params[:id]}") end def destroy @rental_item_allow_list.destroy - render json: fmt(ok, [], 'Deleted rental_item_allow_list = ' + params[:id]) + render json: fmt(ok, [], "Deleted rental_item_allow_list = #{params[:id]}") end private @@ -32,7 +34,7 @@ def set_rental_item_allow_list if RentalItemAllowList.exists?(params[:id]) @rental_item_allow_list = RentalItemAllowList.find(params[:id]) else - render json: fmt(not_found, [], 'Not found rental_item_allow_list = ' + params[:id]) + render json: fmt(not_found, [], "Not found rental_item_allow_list = #{params[:id]}") end end diff --git a/api/app/controllers/rental_items_controller.rb b/api/app/controllers/rental_items_controller.rb index b5856b754..a04e531b4 100644 --- a/api/app/controllers/rental_items_controller.rb +++ b/api/app/controllers/rental_items_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class RentalItemsController < ApplicationController before_action :set_rental_item, only: %i[show update destroy] @@ -17,12 +19,12 @@ def create def update @rental_item.update(rental_item_params) - render json: fmt(created, @rental_item, 'Updated rental_item id = ' + params[:id]) + render json: fmt(created, @rental_item, "Updated rental_item id = #{params[:id]}") end def destroy @rental_item.destroy - render json: fmt(ok, [], 'Deleted rental_item = ' + params[:id]) + render json: fmt(ok, [], "Deleted rental_item = #{params[:id]}") end private @@ -32,7 +34,7 @@ def set_rental_item if RentalItem.exists?(params[:id]) @rental_item = RentalItem.find(params[:id]) else - render json: fmt(not_found, [], 'Not found rental_item = ' + params[:id]) + render json: fmt(not_found, [], "Not found rental_item = #{params[:id]}") end end diff --git a/api/app/controllers/rental_orders_controller.rb b/api/app/controllers/rental_orders_controller.rb index f86549ebc..13f494aef 100644 --- a/api/app/controllers/rental_orders_controller.rb +++ b/api/app/controllers/rental_orders_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class RentalOrdersController < ApplicationController before_action :set_rental_order, only: %i[show update destroy] @@ -25,14 +27,14 @@ def create # PATCH/PUT /rental_orders/1.json def update @rental_order.update(rental_order_params) - render json: fmt(created, @rental_order, 'Updated rental_order id = ' + params[:id]) + render json: fmt(created, @rental_order, "Updated rental_order id = #{params[:id]}") end # DELETE /rental_orders/1 # DELETE /rental_orders/1.json def destroy @rental_order.destroy - render json: fmt(ok, [], 'Deleted rental_order = ' + params[:id]) + render json: fmt(ok, [], "Deleted rental_order = #{params[:id]}") end private @@ -42,7 +44,7 @@ def set_rental_order if RentalOrder.exists?(params[:id]) @rental_order = RentalOrder.find(params[:id]) else - render json: fmt(not_found, [], 'Not found rental_order = ' + params[:id]) + render json: fmt(not_found, [], "Not found rental_order = #{params[:id]}") end end diff --git a/api/app/controllers/shops_controller.rb b/api/app/controllers/shops_controller.rb index 7942a4cc8..4378f5959 100644 --- a/api/app/controllers/shops_controller.rb +++ b/api/app/controllers/shops_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class ShopsController < ApplicationController before_action :set_shop, only: %i[show update destroy] @@ -17,12 +19,12 @@ def create def update @shop.update(shop_params) - render json: fmt(created, @shop, 'Updated shop id = ' + params[:id]) + render json: fmt(created, @shop, "Updated shop id = #{params[:id]}") end def destroy @shop.destroy - render json: fmt(ok, [], 'Deleted shop = ' + params[:id]) + render json: fmt(ok, [], "Deleted shop = #{params[:id]}") end private @@ -32,7 +34,7 @@ def set_shop if Shop.exists?(params[:id]) @shop = Shop.find(params[:id]) else - render json: fmt(not_found, [], 'Not found shop = ' + params[:id]) + render json: fmt(not_found, [], "Not found shop = #{params[:id]}") end end diff --git a/api/app/controllers/stage_common_options_controller.rb b/api/app/controllers/stage_common_options_controller.rb index 45e4414ad..06b810e0d 100644 --- a/api/app/controllers/stage_common_options_controller.rb +++ b/api/app/controllers/stage_common_options_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class StageCommonOptionsController < ApplicationController before_action :set_stage_common_option, only: %i[show update destroy] @@ -25,14 +27,14 @@ def create # PATCH/PUT /stage_common_options/1.json def update @stage_common_option.update(stage_common_option_params) - render json: fmt(created, @stage_common_option, 'Updated stage_common_option id = ' + params[:id]) + render json: fmt(created, @stage_common_option, "Updated stage_common_option id = #{params[:id]}") end # DELETE /stage_common_options/1 # DELETE /stage_common_options/1.json def destroy @stage_common_option.destroy - render json: fmt(ok, [], 'Deleted stage_common_option = ' + params[:id]) + render json: fmt(ok, [], "Deleted stage_common_option = #{params[:id]}") end private @@ -42,7 +44,7 @@ def set_stage_common_option if StageCommonOption.exists?(params[:id]) @stage_common_option = StageCommonOption.find(params[:id]) else - render json: fmt(not_found, [], 'Not found stage_common_option = ' + params[:id]) + render json: fmt(not_found, [], "Not found stage_common_option = #{params[:id]}") end end diff --git a/api/app/controllers/stage_number_controller.rb b/api/app/controllers/stage_number_controller.rb index 4e5514015..1771df1a7 100644 --- a/api/app/controllers/stage_number_controller.rb +++ b/api/app/controllers/stage_number_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class StageNumberController < ApplicationController before_action :set_stage_number, only: %i[show update destroy] @@ -13,7 +15,7 @@ def index else stage.stage_numbers.map do |stage_number| { - "group_identification_id": stage_number.group_identification.nil? ? nil : stage_number.group_identification.id, + "group_identification_id": stage_number.group_identification&.id, "stage_number": stage_number, "num": if stage_number.group_identification.nil? nil @@ -40,12 +42,12 @@ def create def update @stage_number.update(stage_number_params) - render json: fmt(ok, @stage_number, 'Updated stage_number id =' + params[:id]) + render json: fmt(ok, @stage_number, "Updated stage_number id =#{params[:id]}") end def destroy @stage_number.destroy - render json: fmt(ok, [], 'Deleted stage_number id =' + params[:id]) + render json: fmt(ok, [], "Deleted stage_number id =#{params[:id]}") end private @@ -54,7 +56,7 @@ def set_stage_number if StageNumber.exists?(params[:id]) @stage_number = StageNumber.find(params[:id]) else - render json: fmt(not_found, [], 'Not found stage_number id = ' + params[:id]) + render json: fmt(not_found, [], "Not found stage_number id = #{params[:id]}") end end diff --git a/api/app/controllers/stage_orders_controller.rb b/api/app/controllers/stage_orders_controller.rb index e52f7062b..97f881674 100644 --- a/api/app/controllers/stage_orders_controller.rb +++ b/api/app/controllers/stage_orders_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class StageOrdersController < ApplicationController before_action :set_stage_order, only: %i[show update destroy] @@ -25,14 +27,14 @@ def create # PATCH/PUT /stage_orders/1.json def update @stage_order.update(stage_order_params) - render json: fmt(created, @stage_order, 'Updated stage_order id = ' + params[:id]) + render json: fmt(created, @stage_order, "Updated stage_order id = #{params[:id]}") end # DELETE /stage_orders/1 # DELETE /stage_orders/1.json def destroy @stage_order.destroy - render json: fmt(ok, [], 'Deleted stage_order = ' + params[:id]) + render json: fmt(ok, [], "Deleted stage_order = #{params[:id]}") end private @@ -42,7 +44,7 @@ def set_stage_order if StageOrder.exists?(params[:id]) @stage_order = StageOrder.find(params[:id]) else - render json: fmt(not_found, [], 'Not found stage_order = ' + params[:id]) + render json: fmt(not_found, [], "Not found stage_order = #{params[:id]}") end end diff --git a/api/app/controllers/stages_controller.rb b/api/app/controllers/stages_controller.rb index 109fd32ea..c8ca63918 100644 --- a/api/app/controllers/stages_controller.rb +++ b/api/app/controllers/stages_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class StagesController < ApplicationController before_action :set_stage, only: %i[show update destroy] @@ -27,12 +29,12 @@ def create def update @stage.update(stage_params) - render json: fmt(created, @stage, 'Updated stage id = ' + params[:id]) + render json: fmt(created, @stage, "Updated stage id = #{params[:id]}") end def destroy @stage.destroy - render json: fmt(ok, [], 'Deleted stage = ' + params[:id]) + render json: fmt(ok, [], "Deleted stage = #{params[:id]}") end private @@ -42,7 +44,7 @@ def set_stage if Stage.exists?(params[:id]) @stage = Stage.find(params[:id]) else - render json: fmt(not_found, [], 'Not found stage = ' + params[:id]) + render json: fmt(not_found, [], "Not found stage = #{params[:id]}") end end diff --git a/api/app/controllers/stocker_items_controller.rb b/api/app/controllers/stocker_items_controller.rb index 90962bfa7..c01804ebc 100644 --- a/api/app/controllers/stocker_items_controller.rb +++ b/api/app/controllers/stocker_items_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class StockerItemsController < ApplicationController before_action :set_stocker_item, only: %i[show update destroy] @@ -27,14 +29,14 @@ def create # PATCH/PUT /stocker_items/1.json def update @stocker_item.update(stocker_item_params) - render json: fmt(created, @stocker_item, 'Updated stocker_item id = ' + params[:id]) + render json: fmt(created, @stocker_item, "Updated stocker_item id = #{params[:id]}") end # DELETE /stocker_items/1 # DELETE /stocker_items/1.json def destroy @stocker_item.destroy - render json: fmt(ok, [], 'Deleted stocker_item = ' + params[:id]) + render json: fmt(ok, [], "Deleted stocker_item = #{params[:id]}") end private @@ -44,7 +46,7 @@ def set_stocker_item if StockerItem.exists?(params[:id]) @stocker_item = StockerItem.find(params[:id]) else - render json: fmt(not_found, [], 'Not found stocker_item = ' + params[:id]) + render json: fmt(not_found, [], "Not found stocker_item = #{params[:id]}") end end diff --git a/api/app/controllers/stocker_places_controller.rb b/api/app/controllers/stocker_places_controller.rb index d9557638b..7570a4c3c 100644 --- a/api/app/controllers/stocker_places_controller.rb +++ b/api/app/controllers/stocker_places_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class StockerPlacesController < ApplicationController before_action :set_stocker_place, only: %i[show update destroy] @@ -17,12 +19,12 @@ def create def update @stocker_place.update(stocker_place_params) - render json: fmt(created, @stocker_place, 'Updated stocker_place id = ' + params[:id]) + render json: fmt(created, @stocker_place, "Updated stocker_place id = #{params[:id]}") end def destroy @stocker_place.destroy - render json: fmt(ok, [], 'Deleted stocker_place = ' + params[:id]) + render json: fmt(ok, [], "Deleted stocker_place = #{params[:id]}") end private @@ -32,7 +34,7 @@ def set_stocker_place if StockerPlace.exists?(params[:id]) @stocker_place = StockerPlace.find(params[:id]) else - render json: fmt(not_found, [], 'Not found stocker_place = ' + params[:id]) + render json: fmt(not_found, [], "Not found stocker_place = #{params[:id]}") end end diff --git a/api/app/controllers/sub_reps_controller.rb b/api/app/controllers/sub_reps_controller.rb index fc162df88..73c03e5f1 100644 --- a/api/app/controllers/sub_reps_controller.rb +++ b/api/app/controllers/sub_reps_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class SubRepsController < ApplicationController before_action :set_sub_rep, only: %i[show update destroy] @@ -25,14 +27,14 @@ def create # PATCH/PUT /sub_reps/1.json def update @sub_rep.update(sub_rep_params) - render json: fmt(created, @sub_rep, 'Updated sub_rep id = ' + params[:id]) + render json: fmt(created, @sub_rep, "Updated sub_rep id = #{params[:id]}") end # DELETE /sub_reps/1 # DELETE /sub_reps/1.json def destroy @sub_rep.destroy - render json: fmt(ok, [], 'Deleted sub_rep = ' + params[:id]) + render json: fmt(ok, [], "Deleted sub_rep = #{params[:id]}") end private @@ -42,7 +44,7 @@ def set_sub_rep if SubRep.exists?(params[:id]) @sub_rep = SubRep.find(params[:id]) else - render json: fmt(not_found, [], 'Not found sub_rep = ' + params[:id]) + render json: fmt(not_found, [], "Not found sub_rep = #{params[:id]}") end end diff --git a/api/app/controllers/user_details_controller.rb b/api/app/controllers/user_details_controller.rb index 070f750cd..fef26e316 100644 --- a/api/app/controllers/user_details_controller.rb +++ b/api/app/controllers/user_details_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class UserDetailsController < ApplicationController before_action :set_user_detail, only: %i[show update destroy] @@ -30,14 +32,14 @@ def create # PATCH/PUT /user_details/1.json def update @user_detail.update(user_detail_params) - render json: fmt(created, @user_detail, 'Updated user_detail id = ' + params[:id]) + render json: fmt(created, @user_detail, "Updated user_detail id = #{params[:id]}") end # DELETE /user_details/1 # DELETE /user_details/1.json def destroy @user_detail.destroy - render json: fmt(ok, [], 'Deleted user_detail = ' + params[:id]) + render json: fmt(ok, [], "Deleted user_detail = #{params[:id]}") end private @@ -47,7 +49,7 @@ def set_user_detail if UserDetail.exists?(params[:id]) @user_detail = UserDetail.find(params[:id]) else - render json: fmt(not_found, [], 'Not found user_detail = ' + params[:id]) + render json: fmt(not_found, [], "Not found user_detail = #{params[:id]}") end end diff --git a/api/app/controllers/user_page_settings_controller.rb b/api/app/controllers/user_page_settings_controller.rb index 79f8c7772..c596f2c84 100644 --- a/api/app/controllers/user_page_settings_controller.rb +++ b/api/app/controllers/user_page_settings_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class UserPageSettingsController < ApplicationController before_action :set_user_page_setting, only: %i[show update destroy] @@ -25,14 +27,14 @@ def create # PATCH/PUT /user_page_settings/1.json def update @user_page_setting.update(user_page_setting_params) - render json: fmt(created, @user_page_setting, 'Updated user_page_setting id = ' + params[:id]) + render json: fmt(created, @user_page_setting, "Updated user_page_setting id = #{params[:id]}") end # DELETE /user_page_settings/1 # DELETE /user_page_settings/1.json def destroy @user_page_setting.destroy - render json: fmt(ok, [], 'Deleted user_page_setting = ' + params[:id]) + render json: fmt(ok, [], "Deleted user_page_setting = #{params[:id]}") end private @@ -42,7 +44,7 @@ def set_user_page_setting if UserPageSetting.exists?(params[:id]) @user_page_setting = UserPageSetting.find(params[:id]) else - render json: fmt(not_found, [], 'Not found user_page_setting = ' + params[:id]) + render json: fmt(not_found, [], "Not found user_page_setting = #{params[:id]}") end end diff --git a/api/app/controllers/users_controller.rb b/api/app/controllers/users_controller.rb index 03f9249b3..93490e256 100644 --- a/api/app/controllers/users_controller.rb +++ b/api/app/controllers/users_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class UsersController < ApplicationController # before_action :authenticate_api_user! before_action :set_user, only: %i[show update destroy] @@ -18,12 +20,12 @@ def get_current_user def update @user.update(user_params) - render json: fmt(ok, @user, 'Updated user id = ' + params[:id]) + render json: fmt(ok, @user, "Updated user id = #{params[:id]}") end def destroy @user.destroy - render json: fmt(ok, [], 'Deleted user = ' + params[:id]) + render json: fmt(ok, [], "Deleted user = #{params[:id]}") end def show_user_detail @@ -42,8 +44,7 @@ def show_user_detail @groups = @user.groups groups = [] - for group in @groups - group_data = [] + @groups.each do |group| group_data = { group: group, fes_year: group.fes_year.year_num, @@ -108,7 +109,7 @@ def reset_password @user.password = reset_password_params[:password] @user.password_confirmation = reset_password_params[:password_confirmation] @user.save! - render json: fmt(ok, [], 'Updated password user_id = ' + params[:user_id]) + render json: fmt(ok, [], "Updated password user_id = #{params[:user_id]}") end def simply_user_create diff --git a/api/app/controllers/venue_maps_controller.rb b/api/app/controllers/venue_maps_controller.rb index ccf6794bb..a363a8ad6 100644 --- a/api/app/controllers/venue_maps_controller.rb +++ b/api/app/controllers/venue_maps_controller.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class VenueMapsController < ApplicationController before_action :set_venue_map, only: %i[show update destroy] @@ -25,14 +27,14 @@ def create # PATCH/PUT /venue_maps/1.json def update @venue_map.update(venue_map_params) - render json: fmt(created, @venue_map, 'Updated venue_map id = ' + params[:id]) + render json: fmt(created, @venue_map, "Updated venue_map id = #{params[:id]}") end # DELETE /venue_maps/1 # DELETE /venue_maps/1.json def destroy @venue_map.destroy - render json: fmt(ok, [], 'Deleted venue_map = ' + params[:id]) + render json: fmt(ok, [], "Deleted venue_map = #{params[:id]}") end private @@ -42,7 +44,7 @@ def set_venue_map if VenueMap.exists?(params[:id]) @venue_map = VenueMap.find(params[:id]) else - render json: fmt(not_found, [], 'Not found venue_map = ' + params[:id]) + render json: fmt(not_found, [], "Not found venue_map = #{params[:id]}") end end diff --git a/api/app/jobs/application_job.rb b/api/app/jobs/application_job.rb index d394c3d10..bef395997 100644 --- a/api/app/jobs/application_job.rb +++ b/api/app/jobs/application_job.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class ApplicationJob < ActiveJob::Base # Automatically retry jobs that encountered a deadlock # retry_on ActiveRecord::Deadlocked diff --git a/api/app/mailers/application_mailer.rb b/api/app/mailers/application_mailer.rb index 286b2239d..d84cb6e71 100644 --- a/api/app/mailers/application_mailer.rb +++ b/api/app/mailers/application_mailer.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class ApplicationMailer < ActionMailer::Base default from: 'from@example.com' layout 'mailer' diff --git a/api/app/models/announcement.rb b/api/app/models/announcement.rb index 7a3f06809..8f8292238 100644 --- a/api/app/models/announcement.rb +++ b/api/app/models/announcement.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Announcement < ApplicationRecord belongs_to :group diff --git a/api/app/models/application_record.rb b/api/app/models/application_record.rb index 10a4cba84..71fbba5b3 100644 --- a/api/app/models/application_record.rb +++ b/api/app/models/application_record.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class ApplicationRecord < ActiveRecord::Base self.abstract_class = true end diff --git a/api/app/models/assign_group_place.rb b/api/app/models/assign_group_place.rb index 9552d4d74..c2361e2d7 100644 --- a/api/app/models/assign_group_place.rb +++ b/api/app/models/assign_group_place.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AssignGroupPlace < ApplicationRecord belongs_to :place_order belongs_to :place diff --git a/api/app/models/assign_rental_item.rb b/api/app/models/assign_rental_item.rb index e52a171d0..f30bcdff7 100644 --- a/api/app/models/assign_rental_item.rb +++ b/api/app/models/assign_rental_item.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AssignRentalItem < ApplicationRecord belongs_to :group belongs_to :rental_item diff --git a/api/app/models/assign_stage.rb b/api/app/models/assign_stage.rb index 4ab8fd670..ae8862195 100644 --- a/api/app/models/assign_stage.rb +++ b/api/app/models/assign_stage.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AssignStage < ApplicationRecord belongs_to :stage belongs_to :stage_order diff --git a/api/app/models/contact_person.rb b/api/app/models/contact_person.rb index 5234ce400..d2456dcf2 100644 --- a/api/app/models/contact_person.rb +++ b/api/app/models/contact_person.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class ContactPerson < ApplicationRecord has_many :groups, dependent: :destroy end diff --git a/api/app/models/cooking_process_order.rb b/api/app/models/cooking_process_order.rb index 3524b933e..e8f3de25c 100644 --- a/api/app/models/cooking_process_order.rb +++ b/api/app/models/cooking_process_order.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CookingProcessOrder < ApplicationRecord # group_id という名前の外部キーを持つ group への belongs_to 関連 belongs_to :group diff --git a/api/app/models/current_stock.rb b/api/app/models/current_stock.rb index b7d73b25f..b236677be 100644 --- a/api/app/models/current_stock.rb +++ b/api/app/models/current_stock.rb @@ -1,2 +1,4 @@ +# frozen_string_literal: true + class CurrentStock < ApplicationRecord end diff --git a/api/app/models/department.rb b/api/app/models/department.rb index b2f2e1e00..bd5caefd3 100644 --- a/api/app/models/department.rb +++ b/api/app/models/department.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Department < ApplicationRecord has_many :user_details has_many :sub_reps diff --git a/api/app/models/employee.rb b/api/app/models/employee.rb index 203e58c3b..a548f718b 100644 --- a/api/app/models/employee.rb +++ b/api/app/models/employee.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Employee < ApplicationRecord belongs_to :group belongs_to :stool_test diff --git a/api/app/models/fes_date.rb b/api/app/models/fes_date.rb index fa646d962..f822201a5 100644 --- a/api/app/models/fes_date.rb +++ b/api/app/models/fes_date.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class FesDate < ApplicationRecord belongs_to :fes_year has_many :stage_orders diff --git a/api/app/models/fes_year.rb b/api/app/models/fes_year.rb index 29dc900d8..dff99e665 100644 --- a/api/app/models/fes_year.rb +++ b/api/app/models/fes_year.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class FesYear < ApplicationRecord has_many :groups has_many :fes_dates diff --git a/api/app/models/food_product.rb b/api/app/models/food_product.rb index 29b65ffe9..649e1213e 100644 --- a/api/app/models/food_product.rb +++ b/api/app/models/food_product.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class FoodProduct < ApplicationRecord belongs_to :group has_many :purchase_lists, dependent: :destroy diff --git a/api/app/models/grade.rb b/api/app/models/grade.rb index fd58bdf29..3577f5e47 100644 --- a/api/app/models/grade.rb +++ b/api/app/models/grade.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Grade < ApplicationRecord has_many :user_details has_many :sub_reps diff --git a/api/app/models/group.rb b/api/app/models/group.rb index 1ee8c34ff..ec26f6ae7 100644 --- a/api/app/models/group.rb +++ b/api/app/models/group.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Group < ApplicationRecord belongs_to :user belongs_to :fes_year @@ -62,11 +64,11 @@ def self.with_order_infos { "group": group, "user": group.user.nil? ? nil : group.user, - "group_category": group.group_category.nil? ? nil : group.group_category.name, - "fes_year": group.fes_year.nil? ? nil : group.fes_year.year_num, - "sub_rep": group.sub_rep.nil? ? nil : group.sub_rep.to_info_h, - "place_order": group.place_order.nil? ? nil : group.place_order.to_place_name_h, - "stage_orders": if group.stage_orders.count == 0 + "group_category": group.group_category&.name, + "fes_year": group.fes_year&.year_num, + "sub_rep": group.sub_rep&.to_info_h, + "place_order": group.place_order&.to_place_name_h, + "stage_orders": if group.stage_orders.count.zero? nil else group.stage_orders.map do |stage_order| @@ -75,8 +77,8 @@ def self.with_order_infos } end end, - "stage_common_option": group.stage_common_option.nil? ? nil : group.stage_common_option.to_info_h, - "power_orders": if group.power_orders.count == 0 + "stage_common_option": group.stage_common_option&.to_info_h, + "power_orders": if group.power_orders.count.zero? nil else group.power_orders.map do |power_order| @@ -85,7 +87,7 @@ def self.with_order_infos } end end, - "rental_orders": if group.rental_orders.count == 0 + "rental_orders": if group.rental_orders.count.zero? nil else group.rental_orders.map do |rental_order| @@ -94,7 +96,7 @@ def self.with_order_infos } end end, - "employees": if group.employees.count == 0 + "employees": if group.employees.count.zero? nil else group.employees.map do |employee| @@ -103,7 +105,7 @@ def self.with_order_infos } end end, - "food_products": if group.food_products.count == 0 + "food_products": if group.food_products.count.zero? nil else group.food_products.map do |food_product| @@ -117,10 +119,10 @@ def self.with_order_infos } end end, - "public_relation": group.public_relation.nil? ? nil : group.public_relation.to_info_h, - "venue_map": group.venue_map.nil? ? nil : group.venue_map.to_info_h, - "announcement": group.announcement.nil? ? nil : group.announcement.to_info_h, - "cooking_process_order": group.cooking_process_order.nil? ? nil : group.cooking_process_order.to_info_h + "public_relation": group.public_relation&.to_info_h, + "venue_map": group.venue_map&.to_info_h, + "announcement": group.announcement&.to_info_h, + "cooking_process_order": group.cooking_process_order&.to_info_h } end end @@ -132,11 +134,11 @@ def self.with_order_info(group_id) { "group": group, "user": group.user.nil? ? nil : group.user, - "group_category": group.group_category.nil? ? nil : group.group_category.name, - "fes_year": group.fes_year.nil? ? nil : group.fes_year.year_num, - "sub_rep": group.sub_rep.nil? ? nil : group.sub_rep.to_info_h, - "place_order": group.place_order.nil? ? nil : group.place_order.to_place_name_h, - "stage_orders": if group.stage_orders.count == 0 + "group_category": group.group_category&.name, + "fes_year": group.fes_year&.year_num, + "sub_rep": group.sub_rep&.to_info_h, + "place_order": group.place_order&.to_place_name_h, + "stage_orders": if group.stage_orders.count.zero? nil else group.stage_orders.map do |stage_order| @@ -145,8 +147,8 @@ def self.with_order_info(group_id) } end end, - "stage_common_option": group.stage_common_option.nil? ? nil : group.stage_common_option.to_info_h, - "power_orders": if group.power_orders.count == 0 + "stage_common_option": group.stage_common_option&.to_info_h, + "power_orders": if group.power_orders.count.zero? nil else group.power_orders.map do |power_order| @@ -155,7 +157,7 @@ def self.with_order_info(group_id) } end end, - "rental_orders": if group.rental_orders.count == 0 + "rental_orders": if group.rental_orders.count.zero? nil else group.rental_orders.map do |rental_order| @@ -164,7 +166,7 @@ def self.with_order_info(group_id) } end end, - "employees": if group.employees.count == 0 + "employees": if group.employees.count.zero? nil else group.employees.map do |employee| @@ -173,7 +175,7 @@ def self.with_order_info(group_id) } end end, - "food_products": if group.food_products.count == 0 + "food_products": if group.food_products.count.zero? nil else group.food_products.map do |food_product| @@ -187,10 +189,10 @@ def self.with_order_info(group_id) } end end, - "public_relation": group.public_relation.nil? ? nil : group.public_relation.to_info_h, - "venue_map": group.venue_map.nil? ? nil : group.venue_map.to_info_h, - "announcement": group.announcement.nil? ? nil : group.announcement.to_info_h, - "cooking_process_order": group.cooking_process_order.nil? ? nil : group.cooking_process_order.to_info_h + "public_relation": group.public_relation&.to_info_h, + "venue_map": group.venue_map&.to_info_h, + "announcement": group.announcement&.to_info_h, + "cooking_process_order": group.cooking_process_order&.to_info_h } @record end @@ -202,11 +204,11 @@ def self.with_order_info_narrow_down_by_fes_year(fes_year_id) { "group": group, "user": group.user.nil? ? nil : group.user, - "group_category": group.group_category.nil? ? nil : group.group_category.name, - "fes_year": group.fes_year.nil? ? nil : group.fes_year.year_num, - "sub_rep": group.sub_rep.nil? ? nil : group.sub_rep.to_info_h, - "place_order": group.place_order.nil? ? nil : group.place_order.to_place_name_h, - "stage_orders": if group.stage_orders.count == 0 + "group_category": group.group_category&.name, + "fes_year": group.fes_year&.year_num, + "sub_rep": group.sub_rep&.to_info_h, + "place_order": group.place_order&.to_place_name_h, + "stage_orders": if group.stage_orders.count.zero? nil else group.stage_orders.map do |stage_order| @@ -215,8 +217,8 @@ def self.with_order_info_narrow_down_by_fes_year(fes_year_id) } end end, - "stage_common_option": group.stage_common_option.nil? ? nil : group.stage_common_option.to_info_h, - "power_orders": if group.power_orders.count == 0 + "stage_common_option": group.stage_common_option&.to_info_h, + "power_orders": if group.power_orders.count.zero? nil else group.power_orders.map do |power_order| @@ -225,7 +227,7 @@ def self.with_order_info_narrow_down_by_fes_year(fes_year_id) } end end, - "rental_orders": if group.rental_orders.count == 0 + "rental_orders": if group.rental_orders.count.zero? nil else group.rental_orders.map do |rental_order| @@ -234,7 +236,7 @@ def self.with_order_info_narrow_down_by_fes_year(fes_year_id) } end end, - "employees": if group.employees.count == 0 + "employees": if group.employees.count.zero? nil else group.employees.map do |employee| @@ -243,7 +245,7 @@ def self.with_order_info_narrow_down_by_fes_year(fes_year_id) } end end, - "food_products": if group.food_products.count == 0 + "food_products": if group.food_products.count.zero? nil else group.food_products.map do |food_product| @@ -257,10 +259,10 @@ def self.with_order_info_narrow_down_by_fes_year(fes_year_id) } end end, - "public_relation": group.public_relation.nil? ? nil : group.public_relation.to_info_h, - "venue_map": group.venue_map.nil? ? nil : group.venue_map.to_info_h, - "announcement": group.announcement.nil? ? nil : group.announcement.to_info_h, - "cooking_process_order": group.cooking_process_order.nil? ? nil : group.cooking_process_order.to_info_h + "public_relation": group.public_relation&.to_info_h, + "venue_map": group.venue_map&.to_info_h, + "announcement": group.announcement&.to_info_h, + "cooking_process_order": group.cooking_process_order&.to_info_h } end end @@ -272,11 +274,11 @@ def self.with_order_info_narrow_down_by_search_word(word) { "group": group, "user": group.user.nil? ? nil : group.user, - "group_category": group.group_category.nil? ? nil : group.group_category.name, - "fes_year": group.fes_year.nil? ? nil : group.fes_year.year_num, - "sub_rep": group.sub_rep.nil? ? nil : group.sub_rep.to_info_h, - "place_order": group.place_order.nil? ? nil : group.place_order.to_place_name_h, - "stage_orders": if group.stage_orders.count == 0 + "group_category": group.group_category&.name, + "fes_year": group.fes_year&.year_num, + "sub_rep": group.sub_rep&.to_info_h, + "place_order": group.place_order&.to_place_name_h, + "stage_orders": if group.stage_orders.count.zero? nil else group.stage_orders.map do |stage_order| @@ -285,8 +287,8 @@ def self.with_order_info_narrow_down_by_search_word(word) } end end, - "stage_common_option": group.stage_common_option.nil? ? nil : group.stage_common_option.to_info_h, - "power_orders": if group.power_orders.count == 0 + "stage_common_option": group.stage_common_option&.to_info_h, + "power_orders": if group.power_orders.count.zero? nil else group.power_orders.map do |power_order| @@ -295,7 +297,7 @@ def self.with_order_info_narrow_down_by_search_word(word) } end end, - "rental_orders": if group.rental_orders.count == 0 + "rental_orders": if group.rental_orders.count.zero? nil else group.rental_orders.map do |rental_order| @@ -304,7 +306,7 @@ def self.with_order_info_narrow_down_by_search_word(word) } end end, - "employees": if group.employees.count == 0 + "employees": if group.employees.count.zero? nil else group.employees.map do |employee| @@ -313,7 +315,7 @@ def self.with_order_info_narrow_down_by_search_word(word) } end end, - "food_products": if group.food_products.count == 0 + "food_products": if group.food_products.count.zero? nil else group.food_products.map do |food_product| @@ -327,10 +329,10 @@ def self.with_order_info_narrow_down_by_search_word(word) } end end, - "public_relation": group.public_relation.nil? ? nil : group.public_relation.id, - "venue_map": group.venue_map.nil? ? nil : group.venue_map.id, - "announcement": group.announcement.nil? ? nil : group.announcement.id, - "cooking_process_order": group.cooking_process_order.nil? ? nil : group.cooking_process_order.id + "public_relation": group.public_relation&.id, + "venue_map": group.venue_map&.id, + "announcement": group.announcement&.id, + "cooking_process_order": group.cooking_process_order&.id } end end @@ -354,28 +356,28 @@ def self.with_order_status_checks .map do |group| { "group": group, - "user": group.user.nil? ? nil : group.user.id, - "group_category": group.group_category.nil? ? nil : group.group_category.id, - "fes_year": group.fes_year.nil? ? nil : group.fes_year.id, - "sub_rep": group.sub_rep.nil? ? nil : group.sub_rep.id, - "place_order": group.place_order.nil? ? nil : group.place_order.id, - "stage_orders": group.stage_orders.count == 0 ? nil : group.stage_orders[0].id, - "stage_common_option": group.stage_common_option.nil? ? nil : group.stage_common_option.id, - "power_orders": group.power_orders.count == 0 ? nil : group.power_orders[0].id, - "rental_orders": group.rental_orders.count == 0 ? nil : group.rental_orders[0].id, - "employees": group.employees.count == 0 ? nil : group.employees[0].id, + "user": group.user&.id, + "group_category": group.group_category&.id, + "fes_year": group.fes_year&.id, + "sub_rep": group.sub_rep&.id, + "place_order": group.place_order&.id, + "stage_orders": group.stage_orders.count.zero? ? nil : group.stage_orders[0].id, + "stage_common_option": group.stage_common_option&.id, + "power_orders": group.power_orders.count.zero? ? nil : group.power_orders[0].id, + "rental_orders": group.rental_orders.count.zero? ? nil : group.rental_orders[0].id, + "employees": group.employees.count.zero? ? nil : group.employees[0].id, "food_products": if group.food_products.empty? nil else { - "food_product": group.food_products.first.nil? ? nil : group.food_products.first.id, + "food_product": group.food_products.first&.id, "purchase_lists": group.food_products.first.nil? || group.food_products.first.purchase_lists.empty? ? nil : group.food_products.first.purchase_lists[0].id } end, - "public_relation": group.public_relation.nil? ? nil : group.public_relation.id, - "venue_map": group.venue_map.nil? ? nil : group.venue_map.id, - "announcement": group.announcement.nil? ? nil : group.announcement.id, - "cooking_process_order": group.cooking_process_order.nil? ? nil : group.cooking_process_order.id + "public_relation": group.public_relation&.id, + "venue_map": group.venue_map&.id, + "announcement": group.announcement&.id, + "cooking_process_order": group.cooking_process_order&.id } end end @@ -385,28 +387,28 @@ def self.with_order_status_check(group_id) @record = { "group": group, - "user": group.user.nil? ? nil : group.user.id, - "group_category": group.group_category.nil? ? nil : group.group_category.id, - "fes_year": group.fes_year.nil? ? nil : group.fes_year.id, - "sub_rep": group.sub_rep.nil? ? nil : group.sub_rep.id, - "place_order": group.place_order.nil? ? nil : group.place_order.id, - "stage_orders": group.stage_orders.count == 0 ? nil : group.stage_orders[0].id, - "stage_common_option": group.stage_common_option.nil? ? nil : group.stage_common_option.id, - "power_orders": group.power_orders.count == 0 ? nil : group.power_orders[0].id, - "rental_orders": group.rental_orders.count == 0 ? nil : group.rental_orders[0].id, - "employees": group.employees.count == 0 ? nil : group.employees[0].id, + "user": group.user&.id, + "group_category": group.group_category&.id, + "fes_year": group.fes_year&.id, + "sub_rep": group.sub_rep&.id, + "place_order": group.place_order&.id, + "stage_orders": group.stage_orders.count.zero? ? nil : group.stage_orders[0].id, + "stage_common_option": group.stage_common_option&.id, + "power_orders": group.power_orders.count.zero? ? nil : group.power_orders[0].id, + "rental_orders": group.rental_orders.count.zero? ? nil : group.rental_orders[0].id, + "employees": group.employees.count.zero? ? nil : group.employees[0].id, "food_products": if group.food_products.empty? nil else { - "food_product": group.food_products.first.nil? ? nil : group.food_products.first.id, + "food_product": group.food_products.first&.id, "purchase_lists": group.food_products.first.nil? || group.food_products.first.purchase_lists.empty? ? nil : group.food_products.first.purchase_lists[0].id } end, - "public_relation": group.public_relation.nil? ? nil : group.public_relation.id, - "venue_map": group.venue_map.nil? ? nil : group.venue_map.id, - "announcement": group.announcement.nil? ? nil : group.announcement.id, - "cooking_process_order": group.cooking_process_order.nil? ? nil : group.cooking_process_order.id + "public_relation": group.public_relation&.id, + "venue_map": group.venue_map&.id, + "announcement": group.announcement&.id, + "cooking_process_order": group.cooking_process_order&.id } @record end @@ -417,28 +419,28 @@ def self.with_order_status_check_narrow_down_by_fes_year(fes_year_id) .map do |group| { "group": group, - "user": group.user.nil? ? nil : group.user.id, - "group_category": group.group_category.nil? ? nil : group.group_category.id, - "fes_year": group.fes_year.nil? ? nil : group.fes_year.id, - "sub_rep": group.sub_rep.nil? ? nil : group.sub_rep.id, - "place_order": group.place_order.nil? ? nil : group.place_order.id, - "stage_orders": group.stage_orders.count == 0 ? nil : group.stage_orders[0].id, - "stage_common_option": group.stage_common_option.nil? ? nil : group.stage_common_option.id, - "power_orders": group.power_orders.count == 0 ? nil : group.power_orders[0].id, - "rental_orders": group.rental_orders.count == 0 ? nil : group.rental_orders[0].id, - "employees": group.employees.count == 0 ? nil : group.employees[0].id, + "user": group.user&.id, + "group_category": group.group_category&.id, + "fes_year": group.fes_year&.id, + "sub_rep": group.sub_rep&.id, + "place_order": group.place_order&.id, + "stage_orders": group.stage_orders.count.zero? ? nil : group.stage_orders[0].id, + "stage_common_option": group.stage_common_option&.id, + "power_orders": group.power_orders.count.zero? ? nil : group.power_orders[0].id, + "rental_orders": group.rental_orders.count.zero? ? nil : group.rental_orders[0].id, + "employees": group.employees.count.zero? ? nil : group.employees[0].id, "food_products": if group.food_products.empty? nil else { - "food_product": group.food_products.first.nil? ? nil : group.food_products.first.id, + "food_product": group.food_products.first&.id, "purchase_lists": group.food_products.first.nil? || group.food_products.first.purchase_lists.empty? ? nil : group.food_products.first.purchase_lists[0].id } end, - "public_relation": group.public_relation.nil? ? nil : group.public_relation.id, - "venue_map": group.venue_map.nil? ? nil : group.venue_map.id, - "announcement": group.announcement.nil? ? nil : group.announcement.id, - "cooking_process_order": group.cooking_process_order.nil? ? nil : group.cooking_process_order.id + "public_relation": group.public_relation&.id, + "venue_map": group.venue_map&.id, + "announcement": group.announcement&.id, + "cooking_process_order": group.cooking_process_order&.id } end end @@ -449,28 +451,28 @@ def self.with_order_status_check_narrow_down_by_search_word(word) .map do |group| { "group": group, - "user": group.user.nil? ? nil : group.user.id, - "group_category": group.group_category.nil? ? nil : group.group_category.id, - "fes_year": group.fes_year.nil? ? nil : group.fes_year.id, - "sub_rep": group.sub_rep.nil? ? nil : group.sub_rep.id, - "place_order": group.place_order.nil? ? nil : group.place_order.id, - "stage_orders": group.stage_orders.count == 0 ? nil : group.stage_orders[0].id, - "stage_common_option": group.stage_common_option.nil? ? nil : group.stage_common_option.id, - "power_orders": group.power_orders.count == 0 ? nil : group.power_orders[0].id, - "rental_orders": group.rental_orders.count == 0 ? nil : group.rental_orders[0].id, - "employees": group.employees.count == 0 ? nil : group.employees[0].id, + "user": group.user&.id, + "group_category": group.group_category&.id, + "fes_year": group.fes_year&.id, + "sub_rep": group.sub_rep&.id, + "place_order": group.place_order&.id, + "stage_orders": group.stage_orders.count.zero? ? nil : group.stage_orders[0].id, + "stage_common_option": group.stage_common_option&.id, + "power_orders": group.power_orders.count.zero? ? nil : group.power_orders[0].id, + "rental_orders": group.rental_orders.count.zero? ? nil : group.rental_orders[0].id, + "employees": group.employees.count.zero? ? nil : group.employees[0].id, "food_products": if group.food_products.empty? nil else { - "food_product": group.food_products.first.nil? ? nil : group.food_products.first.id, + "food_product": group.food_products.first&.id, "purchase_lists": group.food_products.first.nil? || group.food_products.first.purchase_lists.empty? ? nil : group.food_products.first.purchase_lists[0].id } end, - "public_relation": group.public_relation.nil? ? nil : group.public_relation.id, - "venue_map": group.venue_map.nil? ? nil : group.venue_map.id, - "announcement": group.announcement.nil? ? nil : group.announcement.status, - "cooking_process_order": group.cooking_process_order.nil? ? nil : group.cooking_process_order.id + "public_relation": group.public_relation&.id, + "venue_map": group.venue_map&.id, + "announcement": group.announcement&.status, + "cooking_process_order": group.cooking_process_order&.id } end end @@ -484,7 +486,7 @@ def self.with_sub_reps { "group": group, "sub_rep": group.sub_rep, - "sub_rep_info": group.sub_rep.nil? ? nil : group.sub_rep.to_info_h + "sub_rep_info": group.sub_rep&.to_info_h } end end @@ -496,7 +498,7 @@ def self.with_sub_rep(group_id) { "group": group, "sub_rep": group.sub_rep, - "sub_rep_info": group.sub_rep.nil? ? nil : group.sub_rep.to_info_h + "sub_rep_info": group.sub_rep&.to_info_h } end end @@ -510,7 +512,7 @@ def self.with_place_orders { "group": group, "place_order": group.place_order, - "place_order_name": group.place_order.nil? ? nil : group.place_order.to_place_name_h + "place_order_name": group.place_order&.to_place_name_h } end end @@ -523,7 +525,7 @@ def self.with_place_order(group_id) { "group": group, "place_order": group.place_order, - "place_order_name": group.place_order.nil? ? nil : group.place_order.to_place_name_h + "place_order_name": group.place_order&.to_place_name_h } end end @@ -536,13 +538,13 @@ def self.with_stage_orders .map do |group| { "group": group, - "stage_orders": if group.stage_orders.count == 0 + "stage_orders": if group.stage_orders.count.zero? nil else group.stage_orders.map do |stage_order| { "stage_order": stage_order, - "stage_order_info": stage_order.nil? ? nil : stage_order.to_info_h + "stage_order_info": stage_order&.to_info_h } end end @@ -557,13 +559,13 @@ def self.with_stage_order(group_id) .map do |group| { "group": group, - "stage_orders": if group.stage_orders.count == 0 + "stage_orders": if group.stage_orders.count.zero? nil else group.stage_orders.map do |stage_order| { "stage_order": stage_order, - "stage_order_info": stage_order.nil? ? nil : stage_order.to_info_h + "stage_order_info": stage_order&.to_info_h } end end @@ -604,7 +606,7 @@ def self.with_power_orders .map do |group| { "group": group, - "power_orders": group.power_orders.count == 0 ? nil : group.power_orders + "power_orders": group.power_orders.count.zero? ? nil : group.power_orders } end end @@ -616,7 +618,7 @@ def self.with_power_order(group_id) .map do |group| { "group": group, - "power_orders": group.power_orders.count == 0 ? nil : group.power_orders + "power_orders": group.power_orders.count.zero? ? nil : group.power_orders } end end @@ -629,7 +631,7 @@ def self.with_rental_orders .map do |group| { "group": group, - "rental_orders": if group.rental_orders.count == 0 + "rental_orders": if group.rental_orders.count.zero? nil else group.rental_orders.map do |rental_order| @@ -650,7 +652,7 @@ def self.with_rental_order(group_id) .map do |group| { "group": group, - "rental_orders": if group.rental_orders.count == 0 + "rental_orders": if group.rental_orders.count.zero? nil else group.rental_orders.map do |rental_order| @@ -672,7 +674,7 @@ def self.with_employees .map do |group| { "group": group, - "employees": group.employees.count == 0 ? nil : group.employees + "employees": group.employees.count.zero? ? nil : group.employees } end end @@ -684,7 +686,7 @@ def self.with_employee(group_id) .map do |group| { "group": group, - "employees": group.employees.count == 0 ? nil : group.employees + "employees": group.employees.count.zero? ? nil : group.employees } end end @@ -697,7 +699,7 @@ def self.with_food_products .map do |group| { "group": group, - "food_products": group.food_products.count == 0 ? nil : group.food_products + "food_products": group.food_products.count.zero? ? nil : group.food_products } end end @@ -709,7 +711,7 @@ def self.with_food_product(group_id) .map do |group| { "group": group, - "food_products": group.food_products.count == 0 ? nil : group.food_products + "food_products": group.food_products.count.zero? ? nil : group.food_products } end end @@ -722,11 +724,11 @@ def self.with_public_relations .map do |group| { "group": group, - "picture_name": group.public_relation.nil? ? nil : group.public_relation.picture_name, - "picture_path": group.public_relation.nil? ? nil : group.public_relation.picture_path, - "blurb": group.public_relation.nil? ? nil : group.public_relation.blurb, - "created_at": group.public_relation.nil? ? nil : group.public_relation.created_at, - "updated_at": group.public_relation.nil? ? nil : group.public_relation.updated_at + "picture_name": group.public_relation&.picture_name, + "picture_path": group.public_relation&.picture_path, + "blurb": group.public_relation&.blurb, + "created_at": group.public_relation&.created_at, + "updated_at": group.public_relation&.updated_at } end end @@ -737,12 +739,12 @@ def self.with_public_relation(group_id) .map do |group| { "group": group, - "public_relation_id": group.public_relation.nil? ? nil : group.public_relation.id, - "picture_name": group.public_relation.nil? ? nil : group.public_relation.picture_name, - "picture_path": group.public_relation.nil? ? nil : group.public_relation.picture_path, - "blurb": group.public_relation.nil? ? nil : group.public_relation.blurb, - "created_at": group.public_relation.nil? ? nil : group.public_relation.created_at, - "updated_at": group.public_relation.nil? ? nil : group.public_relation.updated_at + "public_relation_id": group.public_relation&.id, + "picture_name": group.public_relation&.picture_name, + "picture_path": group.public_relation&.picture_path, + "blurb": group.public_relation&.blurb, + "created_at": group.public_relation&.created_at, + "updated_at": group.public_relation&.updated_at } end end @@ -760,11 +762,11 @@ def self.with_public_relation_narrow_down_by_fes_year(fes_year_id) .map do |group| { "group": group, - "picture_name": group.public_relation.nil? ? nil : group.public_relation.picture_name, - "picture_path": group.public_relation.nil? ? nil : group.public_relation.picture_path, - "blurb": group.public_relation.nil? ? nil : group.public_relation.blurb, - "created_at": group.public_relation.nil? ? nil : group.public_relation.created_at, - "updated_at": group.public_relation.nil? ? nil : group.public_relation.updated_at + "picture_name": group.public_relation&.picture_name, + "picture_path": group.public_relation&.picture_path, + "blurb": group.public_relation&.blurb, + "created_at": group.public_relation&.created_at, + "updated_at": group.public_relation&.updated_at } end end @@ -775,11 +777,11 @@ def self.with_public_relation_narrow_down_by_search_word(word) .map do |group| { "group": group, - "picture_name": group.public_relation.nil? ? nil : group.public_relation.picture_name, - "picture_path": group.public_relation.nil? ? nil : group.public_relation.picture_path, - "blurb": group.public_relation.nil? ? nil : group.public_relation.blurb, - "created_at": group.public_relation.nil? ? nil : group.public_relation.created_at, - "updated_at": group.public_relation.nil? ? nil : group.public_relation.updated_at + "picture_name": group.public_relation&.picture_name, + "picture_path": group.public_relation&.picture_path, + "blurb": group.public_relation&.blurb, + "created_at": group.public_relation&.created_at, + "updated_at": group.public_relation&.updated_at } end end @@ -955,12 +957,12 @@ def place # 識別番号取得 def number - group_identification.nil? ? nil : group_identification.number + group_identification&.number end # 開催日取得 def date - group_identification.nil? ? nil : group_identification.date + group_identification&.date end # 電力申請の総和を計算する @@ -986,7 +988,7 @@ def unallocated_rental_items rental_orders.preload(:rental_item).map do |rental_order| { "item": rental_order.rental_item.name, - "num": rental_order.num - assign_rental_items.map { |assign_rental_item| assign_rental_item.num }.sum + "num": rental_order.num - assign_rental_items.map(&:num).sum } end end diff --git a/api/app/models/group_category.rb b/api/app/models/group_category.rb index d50958d5c..132e0d3ae 100644 --- a/api/app/models/group_category.rb +++ b/api/app/models/group_category.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class GroupCategory < ApplicationRecord has_many :groups has_many :place_allow_lists diff --git a/api/app/models/group_identification.rb b/api/app/models/group_identification.rb index 7c8d4badc..1475e2acd 100644 --- a/api/app/models/group_identification.rb +++ b/api/app/models/group_identification.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class GroupIdentification < ApplicationRecord belongs_to :group has_one :place_number diff --git a/api/app/models/item_adjustment.rb b/api/app/models/item_adjustment.rb index 40fcb9c2d..039a4bcaf 100644 --- a/api/app/models/item_adjustment.rb +++ b/api/app/models/item_adjustment.rb @@ -1,2 +1,4 @@ +# frozen_string_literal: true + class ItemAdjustment < ApplicationRecord end diff --git a/api/app/models/memo.rb b/api/app/models/memo.rb index e6eb9ca5a..420f37185 100644 --- a/api/app/models/memo.rb +++ b/api/app/models/memo.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Memo < ApplicationRecord belongs_to :user end diff --git a/api/app/models/news.rb b/api/app/models/news.rb index 193f62c49..63dea103e 100644 --- a/api/app/models/news.rb +++ b/api/app/models/news.rb @@ -1,2 +1,4 @@ +# frozen_string_literal: true + class News < ApplicationRecord end diff --git a/api/app/models/place.rb b/api/app/models/place.rb index 31681492b..eeadd66c1 100644 --- a/api/app/models/place.rb +++ b/api/app/models/place.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Place < ApplicationRecord has_many :assign_group_places has_many :place_allow_lists diff --git a/api/app/models/place_allow_list.rb b/api/app/models/place_allow_list.rb index de57d3a4a..221660af8 100644 --- a/api/app/models/place_allow_list.rb +++ b/api/app/models/place_allow_list.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class PlaceAllowList < ApplicationRecord belongs_to :place belongs_to :group_category diff --git a/api/app/models/place_number.rb b/api/app/models/place_number.rb index 63b27ccb6..0b810abdf 100644 --- a/api/app/models/place_number.rb +++ b/api/app/models/place_number.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class PlaceNumber < ApplicationRecord belongs_to :place belongs_to :group_identification diff --git a/api/app/models/place_order.rb b/api/app/models/place_order.rb index f71b37065..647c2fbee 100644 --- a/api/app/models/place_order.rb +++ b/api/app/models/place_order.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class PlaceOrder < ApplicationRecord belongs_to :group has_one :assign_group_place, dependent: :destroy diff --git a/api/app/models/power_order.rb b/api/app/models/power_order.rb index 537c84bba..77292caef 100644 --- a/api/app/models/power_order.rb +++ b/api/app/models/power_order.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class PowerOrder < ApplicationRecord belongs_to :group diff --git a/api/app/models/public_relation.rb b/api/app/models/public_relation.rb index bf040a47b..24353d854 100644 --- a/api/app/models/public_relation.rb +++ b/api/app/models/public_relation.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class PublicRelation < ApplicationRecord belongs_to :group diff --git a/api/app/models/purchase_list.rb b/api/app/models/purchase_list.rb index 21067bd57..5d5a7f2fa 100644 --- a/api/app/models/purchase_list.rb +++ b/api/app/models/purchase_list.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class PurchaseList < ApplicationRecord belongs_to :fes_date belongs_to :food_product diff --git a/api/app/models/rentable_item.rb b/api/app/models/rentable_item.rb index a11e6fc52..76ae985d7 100644 --- a/api/app/models/rentable_item.rb +++ b/api/app/models/rentable_item.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class RentableItem < ApplicationRecord belongs_to :stocker_place belongs_to :stocker_item diff --git a/api/app/models/rental_item.rb b/api/app/models/rental_item.rb index ac1ea3939..69cef45c6 100644 --- a/api/app/models/rental_item.rb +++ b/api/app/models/rental_item.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class RentalItem < ApplicationRecord has_many :rental_item_allow_lists has_many :rental_orders diff --git a/api/app/models/rental_item_allow_list.rb b/api/app/models/rental_item_allow_list.rb index fdc3b1c0b..f481ff1fd 100644 --- a/api/app/models/rental_item_allow_list.rb +++ b/api/app/models/rental_item_allow_list.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class RentalItemAllowList < ApplicationRecord belongs_to :group_category belongs_to :rental_item diff --git a/api/app/models/rental_order.rb b/api/app/models/rental_order.rb index 6570e0be9..e0e426788 100644 --- a/api/app/models/rental_order.rb +++ b/api/app/models/rental_order.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class RentalOrder < ApplicationRecord belongs_to :group belongs_to :rental_item diff --git a/api/app/models/role.rb b/api/app/models/role.rb index 4ec36e445..f36943d65 100644 --- a/api/app/models/role.rb +++ b/api/app/models/role.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Role < ApplicationRecord has_many :users end diff --git a/api/app/models/shop.rb b/api/app/models/shop.rb index e73903f6f..074d59f39 100644 --- a/api/app/models/shop.rb +++ b/api/app/models/shop.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Shop < ApplicationRecord has_many :purchase_lists end diff --git a/api/app/models/stage.rb b/api/app/models/stage.rb index b7c33f3f1..b63b52305 100644 --- a/api/app/models/stage.rb +++ b/api/app/models/stage.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Stage < ApplicationRecord has_many :assign_stages has_many :stage_numbers diff --git a/api/app/models/stage_common_option.rb b/api/app/models/stage_common_option.rb index 495d5a193..4dba553f2 100644 --- a/api/app/models/stage_common_option.rb +++ b/api/app/models/stage_common_option.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class StageCommonOption < ApplicationRecord belongs_to :group diff --git a/api/app/models/stage_number.rb b/api/app/models/stage_number.rb index 53b6279e6..c3d5380c0 100644 --- a/api/app/models/stage_number.rb +++ b/api/app/models/stage_number.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class StageNumber < ApplicationRecord belongs_to :stage belongs_to :group_identification diff --git a/api/app/models/stage_order.rb b/api/app/models/stage_order.rb index 5d42e5b53..ae6f09f2c 100644 --- a/api/app/models/stage_order.rb +++ b/api/app/models/stage_order.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class StageOrder < ApplicationRecord belongs_to :group belongs_to :fes_date diff --git a/api/app/models/stocker_item.rb b/api/app/models/stocker_item.rb index ef026f032..9f11654b4 100644 --- a/api/app/models/stocker_item.rb +++ b/api/app/models/stocker_item.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class StockerItem < ApplicationRecord belongs_to :rental_item belongs_to :stocker_place diff --git a/api/app/models/stocker_place.rb b/api/app/models/stocker_place.rb index 2b5283327..f4747eb6c 100644 --- a/api/app/models/stocker_place.rb +++ b/api/app/models/stocker_place.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class StockerPlace < ApplicationRecord has_many :stocker_items has_many :rentable_items diff --git a/api/app/models/stool_test.rb b/api/app/models/stool_test.rb index 5be635374..50fce11eb 100644 --- a/api/app/models/stool_test.rb +++ b/api/app/models/stool_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class StoolTest < ApplicationRecord has_one :employee end diff --git a/api/app/models/sub_rep.rb b/api/app/models/sub_rep.rb index 0ef6395a9..3e5e9fef7 100644 --- a/api/app/models/sub_rep.rb +++ b/api/app/models/sub_rep.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class SubRep < ApplicationRecord belongs_to :group belongs_to :department diff --git a/api/app/models/user.rb b/api/app/models/user.rb index 3222ec3e2..e89b03b3f 100644 --- a/api/app/models/user.rb +++ b/api/app/models/user.rb @@ -66,14 +66,14 @@ def self.with_user_detail(user_id) "user": user, "role": user.role, "user_detail": user.user_detail, - "user_detail_info": user.user_detail.nil? ? nil : user.user_detail.to_info_h + "user_detail_info": user.user_detail&.to_info_h } end def with_user_detail { "user": self, - "user_detail": user_detail.nil? ? nil : user_detail.to_info_h + "user_detail": user_detail&.to_info_h } end @@ -83,10 +83,10 @@ def with_regist_info @record = @groups.map do |group| { "group": group, - "group_category": group.group_category.nil? ? nil : group.group_category.name, - "sub_rep": group.sub_rep.nil? ? nil : group.sub_rep.to_info_h, - "place_order": group.place_order.nil? ? nil : group.place_order.to_place_name_h, - "stage_orders": if group.stage_orders.count == 0 + "group_category": group.group_category&.name, + "sub_rep": group.sub_rep&.to_info_h, + "place_order": group.place_order&.to_place_name_h, + "stage_orders": if group.stage_orders.count.zero? nil else group.stage_orders.map do |stage_order| @@ -95,8 +95,8 @@ def with_regist_info } end end, - "stage_common_option": group.stage_common_option.nil? ? nil : group.stage_common_option.to_info_h, - "power_orders": if group.power_orders.count == 0 + "stage_common_option": group.stage_common_option&.to_info_h, + "power_orders": if group.power_orders.count.zero? nil else group.power_orders.map do |power_order| @@ -105,7 +105,7 @@ def with_regist_info } end end, - "rental_orders": if group.rental_orders.count == 0 + "rental_orders": if group.rental_orders.count.zero? nil else group.rental_orders.map do |rental_order| @@ -114,7 +114,7 @@ def with_regist_info } end end, - "employees": if group.employees.count == 0 + "employees": if group.employees.count.zero? nil else group.employees.map do |employee| @@ -123,7 +123,7 @@ def with_regist_info } end end, - "food_products": if group.food_products.count == 0 + "food_products": if group.food_products.count.zero? nil else group.food_products.map do |food_product| diff --git a/api/app/models/user_detail.rb b/api/app/models/user_detail.rb index 6153b249e..7067bfad8 100644 --- a/api/app/models/user_detail.rb +++ b/api/app/models/user_detail.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class UserDetail < ApplicationRecord belongs_to :user belongs_to :department diff --git a/api/app/models/user_page_setting.rb b/api/app/models/user_page_setting.rb index dbaa76215..a48e1eb13 100644 --- a/api/app/models/user_page_setting.rb +++ b/api/app/models/user_page_setting.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class UserPageSetting < ApplicationRecord belongs_to :fes_year end diff --git a/api/app/models/venue_map.rb b/api/app/models/venue_map.rb index a3f55fdfa..e4410850b 100644 --- a/api/app/models/venue_map.rb +++ b/api/app/models/venue_map.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class VenueMap < ApplicationRecord belongs_to :group diff --git a/api/app/views/assign_group_places/_assign_group_place.json.jbuilder b/api/app/views/assign_group_places/_assign_group_place.json.jbuilder index d80df3571..1da05439f 100644 --- a/api/app/views/assign_group_places/_assign_group_place.json.jbuilder +++ b/api/app/views/assign_group_places/_assign_group_place.json.jbuilder @@ -1,2 +1,4 @@ +# frozen_string_literal: true + json.extract! assign_group_place, :id, :place_order_id, :place_id, :created_at, :updated_at json.url assign_group_place_url(assign_group_place, format: :json) diff --git a/api/app/views/assign_group_places/index.json.jbuilder b/api/app/views/assign_group_places/index.json.jbuilder index f832673f2..6cd0621b3 100644 --- a/api/app/views/assign_group_places/index.json.jbuilder +++ b/api/app/views/assign_group_places/index.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.array! @assign_group_places, partial: 'assign_group_places/assign_group_place', as: :assign_group_place diff --git a/api/app/views/assign_group_places/show.json.jbuilder b/api/app/views/assign_group_places/show.json.jbuilder index 5c976f9ea..e644217e6 100644 --- a/api/app/views/assign_group_places/show.json.jbuilder +++ b/api/app/views/assign_group_places/show.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.partial! 'assign_group_places/assign_group_place', assign_group_place: @assign_group_place diff --git a/api/app/views/assign_rental_items/_assign_rental_item.json.jbuilder b/api/app/views/assign_rental_items/_assign_rental_item.json.jbuilder index 912ee2671..7e4fe76b5 100644 --- a/api/app/views/assign_rental_items/_assign_rental_item.json.jbuilder +++ b/api/app/views/assign_rental_items/_assign_rental_item.json.jbuilder @@ -1,2 +1,4 @@ +# frozen_string_literal: true + json.extract! assign_rental_item, :id, :rental_order_id, :rentable_item_id, :num, :created_at, :updated_at json.url assign_rental_item_url(assign_rental_item, format: :json) diff --git a/api/app/views/assign_rental_items/index.json.jbuilder b/api/app/views/assign_rental_items/index.json.jbuilder index 4a16cd1df..04f798ef6 100644 --- a/api/app/views/assign_rental_items/index.json.jbuilder +++ b/api/app/views/assign_rental_items/index.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.array! @assign_rental_items, partial: 'assign_rental_items/assign_rental_item', as: :assign_rental_item diff --git a/api/app/views/assign_rental_items/show.json.jbuilder b/api/app/views/assign_rental_items/show.json.jbuilder index 50a8772ce..cb61ef1ec 100644 --- a/api/app/views/assign_rental_items/show.json.jbuilder +++ b/api/app/views/assign_rental_items/show.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.partial! 'assign_rental_items/assign_rental_item', assign_rental_item: @assign_rental_item diff --git a/api/app/views/assign_stages/_assign_stage.json.jbuilder b/api/app/views/assign_stages/_assign_stage.json.jbuilder index ac2d6fa90..75d27934b 100644 --- a/api/app/views/assign_stages/_assign_stage.json.jbuilder +++ b/api/app/views/assign_stages/_assign_stage.json.jbuilder @@ -1,3 +1,5 @@ +# frozen_string_literal: true + json.extract! assign_stage, :id, :stage_order_id, :stage_id, :time_point_start, :time_point_end, :created_at, :updated_at json.url assign_stage_url(assign_stage, format: :json) diff --git a/api/app/views/assign_stages/index.json.jbuilder b/api/app/views/assign_stages/index.json.jbuilder index ccc1f4fed..57a3992f1 100644 --- a/api/app/views/assign_stages/index.json.jbuilder +++ b/api/app/views/assign_stages/index.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.array! @assign_stages, partial: 'assign_stages/assign_stage', as: :assign_stage diff --git a/api/app/views/assign_stages/show.json.jbuilder b/api/app/views/assign_stages/show.json.jbuilder index b7984fbf6..8b5915a01 100644 --- a/api/app/views/assign_stages/show.json.jbuilder +++ b/api/app/views/assign_stages/show.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.partial! 'assign_stages/assign_stage', assign_stage: @assign_stage diff --git a/api/app/views/employees/_employee.json.jbuilder b/api/app/views/employees/_employee.json.jbuilder index 3937ffae4..bd148886a 100644 --- a/api/app/views/employees/_employee.json.jbuilder +++ b/api/app/views/employees/_employee.json.jbuilder @@ -1,2 +1,4 @@ +# frozen_string_literal: true + json.extract! employee, :id, :group_id, :name, :student_id, :employee_category_id, :created_at, :updated_at json.url employee_url(employee, format: :json) diff --git a/api/app/views/employees/index.json.jbuilder b/api/app/views/employees/index.json.jbuilder index 2fdff7f20..e2420598d 100644 --- a/api/app/views/employees/index.json.jbuilder +++ b/api/app/views/employees/index.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.array! @employees, partial: 'employees/employee', as: :employee diff --git a/api/app/views/employees/show.json.jbuilder b/api/app/views/employees/show.json.jbuilder index a186f99f6..b30d42c68 100644 --- a/api/app/views/employees/show.json.jbuilder +++ b/api/app/views/employees/show.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.partial! 'employees/employee', employee: @employee diff --git a/api/app/views/food_products/_food_product.json.jbuilder b/api/app/views/food_products/_food_product.json.jbuilder index 1af232ac7..a3cf134fb 100644 --- a/api/app/views/food_products/_food_product.json.jbuilder +++ b/api/app/views/food_products/_food_product.json.jbuilder @@ -1,3 +1,5 @@ +# frozen_string_literal: true + json.extract! food_product, :id, :group_id, :name, :is_cooking, :first_day_num, :second_day_num, :created_at, :updated_at json.url food_product_url(food_product, format: :json) diff --git a/api/app/views/food_products/index.json.jbuilder b/api/app/views/food_products/index.json.jbuilder index c1d0d23f0..4c28bec94 100644 --- a/api/app/views/food_products/index.json.jbuilder +++ b/api/app/views/food_products/index.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.array! @food_products, partial: 'food_products/food_product', as: :food_product diff --git a/api/app/views/food_products/show.json.jbuilder b/api/app/views/food_products/show.json.jbuilder index c1cd87b06..e3082e776 100644 --- a/api/app/views/food_products/show.json.jbuilder +++ b/api/app/views/food_products/show.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.partial! 'food_products/food_product', food_product: @food_product diff --git a/api/app/views/groups/_group.json.jbuilder b/api/app/views/groups/_group.json.jbuilder index daa880db7..ddc948971 100644 --- a/api/app/views/groups/_group.json.jbuilder +++ b/api/app/views/groups/_group.json.jbuilder @@ -1,3 +1,5 @@ +# frozen_string_literal: true + json.extract! group, :id, :name, :project_name, :activity, :user_id, :group_category_id, :fes_year_id, :created_at, :updated_at json.url group_url(group, format: :json) diff --git a/api/app/views/groups/index.json.jbuilder b/api/app/views/groups/index.json.jbuilder index e4c65773d..eb55b28de 100644 --- a/api/app/views/groups/index.json.jbuilder +++ b/api/app/views/groups/index.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.array! @groups, partial: 'groups/group', as: :group diff --git a/api/app/views/groups/show.json.jbuilder b/api/app/views/groups/show.json.jbuilder index 476ed6e09..31289fa61 100644 --- a/api/app/views/groups/show.json.jbuilder +++ b/api/app/views/groups/show.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.partial! 'groups/group', group: @group diff --git a/api/app/views/memos/_memo.json.jbuilder b/api/app/views/memos/_memo.json.jbuilder index dd8526327..36014b9b8 100644 --- a/api/app/views/memos/_memo.json.jbuilder +++ b/api/app/views/memos/_memo.json.jbuilder @@ -1,2 +1,4 @@ +# frozen_string_literal: true + json.extract! memo, :id, :content, :user_id, :created_at, :updated_at json.url memo_url(memo, format: :json) diff --git a/api/app/views/memos/index.json.jbuilder b/api/app/views/memos/index.json.jbuilder index 4444aa012..e7a1b9b26 100644 --- a/api/app/views/memos/index.json.jbuilder +++ b/api/app/views/memos/index.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.array! @memos, partial: 'memos/memo', as: :memo diff --git a/api/app/views/memos/show.json.jbuilder b/api/app/views/memos/show.json.jbuilder index 6a94ff3b3..42ad47be2 100644 --- a/api/app/views/memos/show.json.jbuilder +++ b/api/app/views/memos/show.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.partial! 'memos/memo', memo: @memo diff --git a/api/app/views/news/_news.json.jbuilder b/api/app/views/news/_news.json.jbuilder index b98fdc8dd..92b7aa24c 100644 --- a/api/app/views/news/_news.json.jbuilder +++ b/api/app/views/news/_news.json.jbuilder @@ -1,2 +1,4 @@ +# frozen_string_literal: true + json.extract! news, :id, :title, :body, :created_at, :updated_at json.url news_url(news, format: :json) diff --git a/api/app/views/news/index.json.jbuilder b/api/app/views/news/index.json.jbuilder index 77af3be5d..35da262c1 100644 --- a/api/app/views/news/index.json.jbuilder +++ b/api/app/views/news/index.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.array! @news, partial: 'news/news', as: :news diff --git a/api/app/views/news/show.json.jbuilder b/api/app/views/news/show.json.jbuilder index f48781316..b24f20e5a 100644 --- a/api/app/views/news/show.json.jbuilder +++ b/api/app/views/news/show.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.partial! 'news/news', news: @news diff --git a/api/app/views/place_allow_lists/_place_allow_list.json.jbuilder b/api/app/views/place_allow_lists/_place_allow_list.json.jbuilder index bbdc7daed..0145dbee5 100644 --- a/api/app/views/place_allow_lists/_place_allow_list.json.jbuilder +++ b/api/app/views/place_allow_lists/_place_allow_list.json.jbuilder @@ -1,2 +1,4 @@ +# frozen_string_literal: true + json.extract! place_allow_list, :id, :place_id, :group_category_id, :enable, :created_at, :updated_at json.url place_allow_list_url(place_allow_list, format: :json) diff --git a/api/app/views/place_allow_lists/index.json.jbuilder b/api/app/views/place_allow_lists/index.json.jbuilder index 19242bbc1..8d4287457 100644 --- a/api/app/views/place_allow_lists/index.json.jbuilder +++ b/api/app/views/place_allow_lists/index.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.array! @place_allow_lists, partial: 'place_allow_lists/place_allow_list', as: :place_allow_list diff --git a/api/app/views/place_allow_lists/show.json.jbuilder b/api/app/views/place_allow_lists/show.json.jbuilder index 139b0e5b4..af64d35e1 100644 --- a/api/app/views/place_allow_lists/show.json.jbuilder +++ b/api/app/views/place_allow_lists/show.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.partial! 'place_allow_lists/place_allow_list', place_allow_list: @place_allow_list diff --git a/api/app/views/place_orders/_place_order.json.jbuilder b/api/app/views/place_orders/_place_order.json.jbuilder index 806e02274..3ef7e4238 100644 --- a/api/app/views/place_orders/_place_order.json.jbuilder +++ b/api/app/views/place_orders/_place_order.json.jbuilder @@ -1,2 +1,4 @@ +# frozen_string_literal: true + json.extract! place_order, :id, :group_id, :first, :second, :third, :remark, :created_at, :updated_at json.url place_order_url(place_order, format: :json) diff --git a/api/app/views/place_orders/index.json.jbuilder b/api/app/views/place_orders/index.json.jbuilder index 98a76ce1a..19b00788b 100644 --- a/api/app/views/place_orders/index.json.jbuilder +++ b/api/app/views/place_orders/index.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.array! @place_orders, partial: 'place_orders/place_order', as: :place_order diff --git a/api/app/views/place_orders/show.json.jbuilder b/api/app/views/place_orders/show.json.jbuilder index 1f3adfb10..7d1fe50f3 100644 --- a/api/app/views/place_orders/show.json.jbuilder +++ b/api/app/views/place_orders/show.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.partial! 'place_orders/place_order', place_order: @place_order diff --git a/api/app/views/power_orders/_power_order.json.jbuilder b/api/app/views/power_orders/_power_order.json.jbuilder index 0aa7ac39a..38914481e 100644 --- a/api/app/views/power_orders/_power_order.json.jbuilder +++ b/api/app/views/power_orders/_power_order.json.jbuilder @@ -1,2 +1,4 @@ +# frozen_string_literal: true + json.extract! power_order, :id, :group_id, :item, :power, :manufacture, :model, :created_at, :updated_at json.url power_order_url(power_order, format: :json) diff --git a/api/app/views/power_orders/index.json.jbuilder b/api/app/views/power_orders/index.json.jbuilder index fc55b80bf..0c000cd16 100644 --- a/api/app/views/power_orders/index.json.jbuilder +++ b/api/app/views/power_orders/index.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.array! @power_orders, partial: 'power_orders/power_order', as: :power_order diff --git a/api/app/views/power_orders/show.json.jbuilder b/api/app/views/power_orders/show.json.jbuilder index 0c72bc229..7ebec8fdc 100644 --- a/api/app/views/power_orders/show.json.jbuilder +++ b/api/app/views/power_orders/show.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.partial! 'power_orders/power_order', power_order: @power_order diff --git a/api/app/views/public_relations/_public_relation.json.jbuilder b/api/app/views/public_relations/_public_relation.json.jbuilder index c36117f83..793528099 100644 --- a/api/app/views/public_relations/_public_relation.json.jbuilder +++ b/api/app/views/public_relations/_public_relation.json.jbuilder @@ -1,2 +1,4 @@ +# frozen_string_literal: true + json.extract! public_relation, :id, :group_id, :picture_path, :blurb, :created_at, :updated_at json.url public_relation_url(public_relation, format: :json) diff --git a/api/app/views/public_relations/index.json.jbuilder b/api/app/views/public_relations/index.json.jbuilder index 28a7f97b5..ebfa027d3 100644 --- a/api/app/views/public_relations/index.json.jbuilder +++ b/api/app/views/public_relations/index.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.array! @public_relations, partial: 'public_relations/public_relation', as: :public_relation diff --git a/api/app/views/public_relations/show.json.jbuilder b/api/app/views/public_relations/show.json.jbuilder index e86707036..5d0e72700 100644 --- a/api/app/views/public_relations/show.json.jbuilder +++ b/api/app/views/public_relations/show.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.partial! 'public_relations/public_relation', public_relation: @public_relation diff --git a/api/app/views/purchase_lists/_purchase_list.json.jbuilder b/api/app/views/purchase_lists/_purchase_list.json.jbuilder index f82045bfb..afff5523f 100644 --- a/api/app/views/purchase_lists/_purchase_list.json.jbuilder +++ b/api/app/views/purchase_lists/_purchase_list.json.jbuilder @@ -1,2 +1,4 @@ +# frozen_string_literal: true + json.extract! purchase_list, :id, :food_product_id, :shop_id, :fes_date_id, :items, :is_fresh, :created_at, :updated_at json.url purchase_list_url(purchase_list, format: :json) diff --git a/api/app/views/purchase_lists/index.json.jbuilder b/api/app/views/purchase_lists/index.json.jbuilder index 8e0b7f667..c0a372de5 100644 --- a/api/app/views/purchase_lists/index.json.jbuilder +++ b/api/app/views/purchase_lists/index.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.array! @purchase_lists, partial: 'purchase_lists/purchase_list', as: :purchase_list diff --git a/api/app/views/purchase_lists/show.json.jbuilder b/api/app/views/purchase_lists/show.json.jbuilder index d8dd92353..8b066c694 100644 --- a/api/app/views/purchase_lists/show.json.jbuilder +++ b/api/app/views/purchase_lists/show.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.partial! 'purchase_lists/purchase_list', purchase_list: @purchase_list diff --git a/api/app/views/rentable_items/_rentable_item.json.jbuilder b/api/app/views/rentable_items/_rentable_item.json.jbuilder index 43843342e..adcbfc0bc 100644 --- a/api/app/views/rentable_items/_rentable_item.json.jbuilder +++ b/api/app/views/rentable_items/_rentable_item.json.jbuilder @@ -1,2 +1,4 @@ +# frozen_string_literal: true + json.extract! rentable_item, :id, :stocker_item_id, :stocker_place_id, :max_num, :created_at, :updated_at json.url rentable_item_url(rentable_item, format: :json) diff --git a/api/app/views/rentable_items/index.json.jbuilder b/api/app/views/rentable_items/index.json.jbuilder index 4f00425cc..d1b2e4822 100644 --- a/api/app/views/rentable_items/index.json.jbuilder +++ b/api/app/views/rentable_items/index.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.array! @rentable_items, partial: 'rentable_items/rentable_item', as: :rentable_item diff --git a/api/app/views/rentable_items/show.json.jbuilder b/api/app/views/rentable_items/show.json.jbuilder index 1ecf48c11..ea8f5629b 100644 --- a/api/app/views/rentable_items/show.json.jbuilder +++ b/api/app/views/rentable_items/show.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.partial! 'rentable_items/rentable_item', rentable_item: @rentable_item diff --git a/api/app/views/rental_orders/_rental_order.json.jbuilder b/api/app/views/rental_orders/_rental_order.json.jbuilder index 03e98eb6a..e47639758 100644 --- a/api/app/views/rental_orders/_rental_order.json.jbuilder +++ b/api/app/views/rental_orders/_rental_order.json.jbuilder @@ -1,2 +1,4 @@ +# frozen_string_literal: true + json.extract! rental_order, :id, :group_id, :rental_item_id, :num, :created_at, :updated_at json.url rental_order_url(rental_order, format: :json) diff --git a/api/app/views/rental_orders/index.json.jbuilder b/api/app/views/rental_orders/index.json.jbuilder index cf6b0afe9..66ac0b528 100644 --- a/api/app/views/rental_orders/index.json.jbuilder +++ b/api/app/views/rental_orders/index.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.array! @rental_orders, partial: 'rental_orders/rental_order', as: :rental_order diff --git a/api/app/views/rental_orders/show.json.jbuilder b/api/app/views/rental_orders/show.json.jbuilder index 2c6d4895a..d8625ac52 100644 --- a/api/app/views/rental_orders/show.json.jbuilder +++ b/api/app/views/rental_orders/show.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.partial! 'rental_orders/rental_order', rental_order: @rental_order diff --git a/api/app/views/stage_common_options/_stage_common_option.json.jbuilder b/api/app/views/stage_common_options/_stage_common_option.json.jbuilder index 58550cd62..72c3f7878 100644 --- a/api/app/views/stage_common_options/_stage_common_option.json.jbuilder +++ b/api/app/views/stage_common_options/_stage_common_option.json.jbuilder @@ -1,3 +1,5 @@ +# frozen_string_literal: true + json.extract! stage_common_option, :id, :group_id, :own_equipment, :bgm, :camera_permission, :loud_sound, :created_at, :updated_at json.url stage_common_option_url(stage_common_option, format: :json) diff --git a/api/app/views/stage_common_options/index.json.jbuilder b/api/app/views/stage_common_options/index.json.jbuilder index 0721f2b7d..ec33f1916 100644 --- a/api/app/views/stage_common_options/index.json.jbuilder +++ b/api/app/views/stage_common_options/index.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.array! @stage_common_options, partial: 'stage_common_options/stage_common_option', as: :stage_common_option diff --git a/api/app/views/stage_common_options/show.json.jbuilder b/api/app/views/stage_common_options/show.json.jbuilder index aeb246307..c811cd26e 100644 --- a/api/app/views/stage_common_options/show.json.jbuilder +++ b/api/app/views/stage_common_options/show.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.partial! 'stage_common_options/stage_common_option', stage_common_option: @stage_common_option diff --git a/api/app/views/stage_orders/_stage_order.json.jbuilder b/api/app/views/stage_orders/_stage_order.json.jbuilder index f66f0e59f..ef8c68d2e 100644 --- a/api/app/views/stage_orders/_stage_order.json.jbuilder +++ b/api/app/views/stage_orders/_stage_order.json.jbuilder @@ -1,3 +1,5 @@ +# frozen_string_literal: true + json.extract! stage_order, :id, :group_id, :is_sunny, :fes_date_id, :stage_first, :stage_second, :use_time_interval, :prepare_time_interval, :cleanup_time_interval, :prepare_start_time, :performance_start_time, :performance_end_time, :cleanup_end_time, :created_at, :updated_at json.url stage_order_url(stage_order, format: :json) diff --git a/api/app/views/stage_orders/index.json.jbuilder b/api/app/views/stage_orders/index.json.jbuilder index 715876ebb..106b0a8ae 100644 --- a/api/app/views/stage_orders/index.json.jbuilder +++ b/api/app/views/stage_orders/index.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.array! @stage_orders, partial: 'stage_orders/stage_order', as: :stage_order diff --git a/api/app/views/stage_orders/show.json.jbuilder b/api/app/views/stage_orders/show.json.jbuilder index e97d6661e..c34f94113 100644 --- a/api/app/views/stage_orders/show.json.jbuilder +++ b/api/app/views/stage_orders/show.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.partial! 'stage_orders/stage_order', stage_order: @stage_order diff --git a/api/app/views/stocker_items/_stocker_item.json.jbuilder b/api/app/views/stocker_items/_stocker_item.json.jbuilder index 4810f1913..355e5c6b1 100644 --- a/api/app/views/stocker_items/_stocker_item.json.jbuilder +++ b/api/app/views/stocker_items/_stocker_item.json.jbuilder @@ -1,2 +1,4 @@ +# frozen_string_literal: true + json.extract! stocker_item, :id, :rental_item_id, :stocker_place_id, :fes_year_id, :num, :created_at, :updated_at json.url stocker_item_url(stocker_item, format: :json) diff --git a/api/app/views/stocker_items/index.json.jbuilder b/api/app/views/stocker_items/index.json.jbuilder index e4a2e5beb..f676eeb78 100644 --- a/api/app/views/stocker_items/index.json.jbuilder +++ b/api/app/views/stocker_items/index.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.array! @stocker_items, partial: 'stocker_items/stocker_item', as: :stocker_item diff --git a/api/app/views/stocker_items/show.json.jbuilder b/api/app/views/stocker_items/show.json.jbuilder index 30d0fd5c6..9e041b01e 100644 --- a/api/app/views/stocker_items/show.json.jbuilder +++ b/api/app/views/stocker_items/show.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.partial! 'stocker_items/stocker_item', stocker_item: @stocker_item diff --git a/api/app/views/sub_reps/_sub_rep.json.jbuilder b/api/app/views/sub_reps/_sub_rep.json.jbuilder index 691a88e01..3cde256b1 100644 --- a/api/app/views/sub_reps/_sub_rep.json.jbuilder +++ b/api/app/views/sub_reps/_sub_rep.json.jbuilder @@ -1,2 +1,4 @@ +# frozen_string_literal: true + json.extract! sub_rep, :id, :group_id, :name, :department_id, :grade_id, :tel, :email, :created_at, :updated_at json.url sub_rep_url(sub_rep, format: :json) diff --git a/api/app/views/sub_reps/index.json.jbuilder b/api/app/views/sub_reps/index.json.jbuilder index ae3713e38..465ca7c11 100644 --- a/api/app/views/sub_reps/index.json.jbuilder +++ b/api/app/views/sub_reps/index.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.array! @sub_reps, partial: 'sub_reps/sub_rep', as: :sub_rep diff --git a/api/app/views/sub_reps/show.json.jbuilder b/api/app/views/sub_reps/show.json.jbuilder index c86682c05..58ec77d75 100644 --- a/api/app/views/sub_reps/show.json.jbuilder +++ b/api/app/views/sub_reps/show.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.partial! 'sub_reps/sub_rep', sub_rep: @sub_rep diff --git a/api/app/views/user_details/_user_detail.json.jbuilder b/api/app/views/user_details/_user_detail.json.jbuilder index 38b08d6e0..07300461e 100644 --- a/api/app/views/user_details/_user_detail.json.jbuilder +++ b/api/app/views/user_details/_user_detail.json.jbuilder @@ -1,2 +1,4 @@ +# frozen_string_literal: true + json.extract! user_detail, :id, :tel, :grade_id, :department_id, :user_id, :created_at, :updated_at json.url user_detail_url(user_detail, format: :json) diff --git a/api/app/views/user_details/index.json.jbuilder b/api/app/views/user_details/index.json.jbuilder index a73ac4e46..33fe7f212 100644 --- a/api/app/views/user_details/index.json.jbuilder +++ b/api/app/views/user_details/index.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.array! @user_details, partial: 'user_details/user_detail', as: :user_detail diff --git a/api/app/views/user_details/show.json.jbuilder b/api/app/views/user_details/show.json.jbuilder index 3713d551a..6bc64aeb4 100644 --- a/api/app/views/user_details/show.json.jbuilder +++ b/api/app/views/user_details/show.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.partial! 'user_details/user_detail', user_detail: @user_detail diff --git a/api/app/views/user_page_settings/_user_page_setting.json.jbuilder b/api/app/views/user_page_settings/_user_page_setting.json.jbuilder index 2e8eb765b..f23fa9f55 100644 --- a/api/app/views/user_page_settings/_user_page_setting.json.jbuilder +++ b/api/app/views/user_page_settings/_user_page_setting.json.jbuilder @@ -1,3 +1,5 @@ +# frozen_string_literal: true + json.extract! user_page_setting, :id, :is_regist_group, :is_regist_food_product, :is_edit_group, :is_edit_sub_rep, :is_edit_place, :is_edit_power_order, :is_edit_rental_order, :is_edit_stage_order, :is_edit_employee, :is_edit_food_product, :is_edit_purchase_list, :created_at, :updated_at json.url user_page_setting_url(user_page_setting, format: :json) diff --git a/api/app/views/user_page_settings/index.json.jbuilder b/api/app/views/user_page_settings/index.json.jbuilder index 4d921268a..a4393d284 100644 --- a/api/app/views/user_page_settings/index.json.jbuilder +++ b/api/app/views/user_page_settings/index.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.array! @user_page_settings, partial: 'user_page_settings/user_page_setting', as: :user_page_setting diff --git a/api/app/views/user_page_settings/show.json.jbuilder b/api/app/views/user_page_settings/show.json.jbuilder index 795a96c98..e1f4de810 100644 --- a/api/app/views/user_page_settings/show.json.jbuilder +++ b/api/app/views/user_page_settings/show.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.partial! 'user_page_settings/user_page_setting', user_page_setting: @user_page_setting diff --git a/api/bin/bundle b/api/bin/bundle index b9a7b0f34..73ec94756 100755 --- a/api/bin/bundle +++ b/api/bin/bundle @@ -14,7 +14,7 @@ m = Module.new do module_function def invoked_as_script? - File.expand_path($0) == File.expand_path(__FILE__) + File.expand_path($PROGRAM_NAME) == File.expand_path(__FILE__) end def env_var_version diff --git a/api/bin/rails b/api/bin/rails index 7a8ff81e6..3504c3f94 100755 --- a/api/bin/rails +++ b/api/bin/rails @@ -1,4 +1,6 @@ #!/usr/bin/env ruby +# frozen_string_literal: true + begin load File.expand_path('spring', __dir__) rescue LoadError => e diff --git a/api/bin/rake b/api/bin/rake index 0ba8c48cb..1fe6cf06b 100755 --- a/api/bin/rake +++ b/api/bin/rake @@ -1,4 +1,6 @@ #!/usr/bin/env ruby +# frozen_string_literal: true + begin load File.expand_path('spring', __dir__) rescue LoadError => e diff --git a/api/bin/setup b/api/bin/setup index 0e39e8cb1..65a6ca72a 100755 --- a/api/bin/setup +++ b/api/bin/setup @@ -1,4 +1,6 @@ #!/usr/bin/env ruby +# frozen_string_literal: true + require 'fileutils' # path to your application root. diff --git a/api/bin/spring b/api/bin/spring index d89ee495f..1c6eabfd8 100755 --- a/api/bin/spring +++ b/api/bin/spring @@ -1,4 +1,5 @@ #!/usr/bin/env ruby +# frozen_string_literal: true # This file loads Spring without using Bundler, in order to be fast. # It gets overwritten when you run the `spring binstub` command. diff --git a/api/config.ru b/api/config.ru index f7ba0b527..842bccc34 100644 --- a/api/config.ru +++ b/api/config.ru @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # This file is used by Rack-based servers to start the application. require_relative 'config/environment' diff --git a/api/config/application.rb b/api/config/application.rb index 9beb9e925..55c21a78d 100644 --- a/api/config/application.rb +++ b/api/config/application.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require_relative 'boot' require 'rails' diff --git a/api/config/boot.rb b/api/config/boot.rb index b9e460cef..c04863fa7 100644 --- a/api/config/boot.rb +++ b/api/config/boot.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) require 'bundler/setup' # Set up gems listed in the Gemfile. diff --git a/api/config/environment.rb b/api/config/environment.rb index 426333bb4..d5abe5580 100644 --- a/api/config/environment.rb +++ b/api/config/environment.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # Load the Rails application. require_relative 'application' diff --git a/api/config/environments/development.rb b/api/config/environments/development.rb index 019727665..7155b9a77 100644 --- a/api/config/environments/development.rb +++ b/api/config/environments/development.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + Rails.application.configure do # Settings specified here will take precedence over those in config/application.rb. diff --git a/api/config/environments/production.rb b/api/config/environments/production.rb index 8883eaba8..018d13189 100644 --- a/api/config/environments/production.rb +++ b/api/config/environments/production.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + Rails.application.configure do # Settings specified here will take precedence over those in config/application.rb. @@ -74,7 +76,7 @@ # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name') if ENV['RAILS_LOG_TO_STDOUT'].present? - logger = ActiveSupport::Logger.new(STDOUT) + logger = ActiveSupport::Logger.new($stdout) logger.formatter = config.log_formatter config.logger = ActiveSupport::TaggedLogging.new(logger) end diff --git a/api/config/environments/test.rb b/api/config/environments/test.rb index 0cb24249b..8f2c4288d 100644 --- a/api/config/environments/test.rb +++ b/api/config/environments/test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # The test environment is used exclusively to run your application's # test suite. You never need to work with it otherwise. Remember that # your test database is "scratch space" for the test suite and is wiped diff --git a/api/config/initializers/application_controller_renderer.rb b/api/config/initializers/application_controller_renderer.rb index 89d2efab2..6d56e4390 100644 --- a/api/config/initializers/application_controller_renderer.rb +++ b/api/config/initializers/application_controller_renderer.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # Be sure to restart your server when you modify this file. # ActiveSupport::Reloader.to_prepare do diff --git a/api/config/initializers/backtrace_silencers.rb b/api/config/initializers/backtrace_silencers.rb index 59385cdf3..4b63f2893 100644 --- a/api/config/initializers/backtrace_silencers.rb +++ b/api/config/initializers/backtrace_silencers.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # Be sure to restart your server when you modify this file. # You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. diff --git a/api/config/initializers/cors.rb b/api/config/initializers/cors.rb index 826cfa02d..284aff758 100644 --- a/api/config/initializers/cors.rb +++ b/api/config/initializers/cors.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # Be sure to restart your server when you modify this file. # Avoid CORS issues when API is called from the frontend app. diff --git a/api/config/initializers/filter_parameter_logging.rb b/api/config/initializers/filter_parameter_logging.rb index 4a994e1e7..7a4f47b4c 100644 --- a/api/config/initializers/filter_parameter_logging.rb +++ b/api/config/initializers/filter_parameter_logging.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # Be sure to restart your server when you modify this file. # Configure sensitive parameters which will be filtered from the log file. diff --git a/api/config/initializers/inflections.rb b/api/config/initializers/inflections.rb index ac033bf9d..dc8474221 100644 --- a/api/config/initializers/inflections.rb +++ b/api/config/initializers/inflections.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # Be sure to restart your server when you modify this file. # Add new inflection rules using the following format. Inflections diff --git a/api/config/initializers/wrap_parameters.rb b/api/config/initializers/wrap_parameters.rb index bbfc3961b..2f3c0db47 100644 --- a/api/config/initializers/wrap_parameters.rb +++ b/api/config/initializers/wrap_parameters.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # Be sure to restart your server when you modify this file. # This file contains settings for ActionController::ParamsWrapper which diff --git a/api/config/puma.rb b/api/config/puma.rb index fd0293426..69e2645fb 100644 --- a/api/config/puma.rb +++ b/api/config/puma.rb @@ -1,23 +1,25 @@ +# frozen_string_literal: true + # Puma can serve each request in a thread from an internal thread pool. # The `threads` method setting takes two numbers: a minimum and maximum. # Any libraries that use thread pools should be configured to match # the maximum value specified for Puma. Default is set to 5 threads for minimum # and maximum; this matches the default thread size of Active Record. # -max_threads_count = ENV.fetch('RAILS_MAX_THREADS') { 5 } +max_threads_count = ENV.fetch('RAILS_MAX_THREADS', 5) min_threads_count = ENV.fetch('RAILS_MIN_THREADS') { max_threads_count } threads min_threads_count, max_threads_count # Specifies the `port` that Puma will listen on to receive requests; default is 3000. # -port ENV.fetch('PORT') { 3000 } +port ENV.fetch('PORT', 3000) # Specifies the `environment` that Puma will run in. # -environment ENV.fetch('RAILS_ENV') { 'development' } +environment ENV.fetch('RAILS_ENV', 'development') # Specifies the `pidfile` that Puma will use. -pidfile ENV.fetch('PIDFILE') { 'tmp/pids/server.pid' } +pidfile ENV.fetch('PIDFILE', 'tmp/pids/server.pid') # Specifies the number of `workers` to boot in clustered mode. # Workers are forked web server processes. If using threads and workers together diff --git a/api/config/routes.rb b/api/config/routes.rb index b2946b104..0f288784d 100644 --- a/api/config/routes.rb +++ b/api/config/routes.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + Rails.application.routes.draw do # 識別番号割り当て get 'group_identification' => 'group_identification#index' diff --git a/api/config/spring.rb b/api/config/spring.rb index 8f6432bf6..93cd0ff8c 100644 --- a/api/config/spring.rb +++ b/api/config/spring.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + Spring.watch( '.ruby-version', '.rbenv-vars', diff --git a/api/db/fixtures/develop/announcement.rb b/api/db/fixtures/develop/announcement.rb index 8a91da863..8ef5052a0 100644 --- a/api/db/fixtures/develop/announcement.rb +++ b/api/db/fixtures/develop/announcement.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + Announcement.seed(:id, { id: 1, diff --git a/api/db/fixtures/develop/assign_group_place.rb b/api/db/fixtures/develop/assign_group_place.rb index 79e646276..d8f4a5b2b 100644 --- a/api/db/fixtures/develop/assign_group_place.rb +++ b/api/db/fixtures/develop/assign_group_place.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + AssignGroupPlace.seed(:id, { id: 1, place_order_id: 1, place_id: 1 }) diff --git a/api/db/fixtures/develop/assign_rental_item.rb b/api/db/fixtures/develop/assign_rental_item.rb index 98034c36b..1539e76c8 100644 --- a/api/db/fixtures/develop/assign_rental_item.rb +++ b/api/db/fixtures/develop/assign_rental_item.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + AssignRentalItem.seed(:id, { id: 1, group_id: 1, rental_item_id: 1, diff --git a/api/db/fixtures/develop/assign_stage.rb b/api/db/fixtures/develop/assign_stage.rb index 62bd09a90..d294c8b85 100644 --- a/api/db/fixtures/develop/assign_stage.rb +++ b/api/db/fixtures/develop/assign_stage.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + AssignStage.seed(:id, { id: 1, stage_order_id: 1, stage_id: 1, diff --git a/api/db/fixtures/develop/department.rb b/api/db/fixtures/develop/department.rb index 30696ff24..2a22e2d20 100644 --- a/api/db/fixtures/develop/department.rb +++ b/api/db/fixtures/develop/department.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + Department.seed(:id, { id: 1, name: '機械工学分野/機械創造工学課程' }, { id: 2, name: '電気電子情報工学分野/電気電子情報工学課程' }, diff --git a/api/db/fixtures/develop/employee.rb b/api/db/fixtures/develop/employee.rb index 48bae636e..b3d72fe1d 100644 --- a/api/db/fixtures/develop/employee.rb +++ b/api/db/fixtures/develop/employee.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + Employee.seed(:id, { id: 1, group_id: 1, name: '技大梅子', diff --git a/api/db/fixtures/develop/fes_year_date.rb b/api/db/fixtures/develop/fes_year_date.rb index fddafad35..559d96bba 100644 --- a/api/db/fixtures/develop/fes_year_date.rb +++ b/api/db/fixtures/develop/fes_year_date.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + FesYear.seed(:id, { id: 1, year_num: 2020 }, { id: 2, year_num: 2021 }, diff --git a/api/db/fixtures/develop/food_product.rb b/api/db/fixtures/develop/food_product.rb index 1bc42140d..61c94f3e9 100644 --- a/api/db/fixtures/develop/food_product.rb +++ b/api/db/fixtures/develop/food_product.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + FoodProduct.seed(:id, { id: 1, group_id: 1, name: 'baked tomato', diff --git a/api/db/fixtures/develop/grade.rb b/api/db/fixtures/develop/grade.rb index ed0c11a61..a331aa75c 100644 --- a/api/db/fixtures/develop/grade.rb +++ b/api/db/fixtures/develop/grade.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + Grade.seed(:id, { id: 1, name: 'B1[学部1年]' }, { id: 2, name: 'B2[学部2年]' }, diff --git a/api/db/fixtures/develop/group.rb b/api/db/fixtures/develop/group.rb index d5c37b85b..ffeae5eff 100644 --- a/api/db/fixtures/develop/group.rb +++ b/api/db/fixtures/develop/group.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + Group.seed(:id, { id: 1, name: 'nutfes', project_name: 'nutfes', diff --git a/api/db/fixtures/develop/group_category.rb b/api/db/fixtures/develop/group_category.rb index 25eb022c8..ab755c4bb 100644 --- a/api/db/fixtures/develop/group_category.rb +++ b/api/db/fixtures/develop/group_category.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + GroupCategory.seed(:id, { id: 1, name: '食品販売' }, { id: 2, name: '物品販売' }, diff --git a/api/db/fixtures/develop/memo.rb b/api/db/fixtures/develop/memo.rb index f350a0d98..17712380b 100644 --- a/api/db/fixtures/develop/memo.rb +++ b/api/db/fixtures/develop/memo.rb @@ -1,2 +1,4 @@ +# frozen_string_literal: true + Memo.seed(:id, { id: 1, content: 'メモ', user_id: 1 }) diff --git a/api/db/fixtures/develop/news.rb b/api/db/fixtures/develop/news.rb index 6917f884b..714cce210 100644 --- a/api/db/fixtures/develop/news.rb +++ b/api/db/fixtures/develop/news.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + News.seed(:id, { id: 1, title: 'nutfes-news1', body: '参加団体管理アプリです.' }, diff --git a/api/db/fixtures/develop/place.rb b/api/db/fixtures/develop/place.rb index 1874f7fa6..3b7586759 100644 --- a/api/db/fixtures/develop/place.rb +++ b/api/db/fixtures/develop/place.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + Place.seed(:id, { id: 1, name: '希望なし' }, { id: 2, name: '講義棟部屋A (103講義室などの大きい講義室)' }, diff --git a/api/db/fixtures/develop/place_allow_list.rb b/api/db/fixtures/develop/place_allow_list.rb index d42fa08ad..52d61f2fd 100644 --- a/api/db/fixtures/develop/place_allow_list.rb +++ b/api/db/fixtures/develop/place_allow_list.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + PlaceAllowList.seed(:id, { id: 1, place_id: 1, group_category_id: 1, diff --git a/api/db/fixtures/develop/place_order.rb b/api/db/fixtures/develop/place_order.rb index 87b4f3de7..505a472da 100644 --- a/api/db/fixtures/develop/place_order.rb +++ b/api/db/fixtures/develop/place_order.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + PlaceOrder.seed(:id, { id: 1, group_id: 1, first: 1, diff --git a/api/db/fixtures/develop/power_order.rb b/api/db/fixtures/develop/power_order.rb index 76048c1a6..6ff3eb326 100644 --- a/api/db/fixtures/develop/power_order.rb +++ b/api/db/fixtures/develop/power_order.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + PowerOrder.seed(:id, { id: 1, group_id: 1, item: 'nutfes-sample', diff --git a/api/db/fixtures/develop/purchase_list.rb b/api/db/fixtures/develop/purchase_list.rb index cafea66c9..3d5ee18e6 100644 --- a/api/db/fixtures/develop/purchase_list.rb +++ b/api/db/fixtures/develop/purchase_list.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + PurchaseList.seed(:id, { id: 1, food_product_id: 1, shop_id: 1, diff --git a/api/db/fixtures/develop/rentable_item.rb b/api/db/fixtures/develop/rentable_item.rb index 2caad658a..07fbbf45c 100644 --- a/api/db/fixtures/develop/rentable_item.rb +++ b/api/db/fixtures/develop/rentable_item.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + RentableItem.seed(:id, { id: 1, stocker_item_id: 1, stocker_place_id: 1, diff --git a/api/db/fixtures/develop/rental_item.rb b/api/db/fixtures/develop/rental_item.rb index 642eac412..fe6d162fd 100644 --- a/api/db/fixtures/develop/rental_item.rb +++ b/api/db/fixtures/develop/rental_item.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + RentalItem.seed(:id, { id: 1, name: '机', is_inside_shop_rentable: true, is_outside_shop_rentable: true, is_stage_rentable: true }, diff --git a/api/db/fixtures/develop/rental_item_allow_list.rb b/api/db/fixtures/develop/rental_item_allow_list.rb index 1d287c243..12b3d9b68 100644 --- a/api/db/fixtures/develop/rental_item_allow_list.rb +++ b/api/db/fixtures/develop/rental_item_allow_list.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + RentalItemAllowList.seed(:id, # 机の貸し出し可能な団体種別 { id: 1, rental_item_id: 1, group_category_id: 1 }, # 模擬店(食品) diff --git a/api/db/fixtures/develop/rental_order.rb b/api/db/fixtures/develop/rental_order.rb index cdc6cb610..6f4220ed3 100644 --- a/api/db/fixtures/develop/rental_order.rb +++ b/api/db/fixtures/develop/rental_order.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + RentalOrder.seed(:id, { id: 1, group_id: 1, rental_item_id: 1, diff --git a/api/db/fixtures/develop/role.rb b/api/db/fixtures/develop/role.rb index 0557c9254..7496e9986 100644 --- a/api/db/fixtures/develop/role.rb +++ b/api/db/fixtures/develop/role.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + Role.seed(:id, { id: 1, name: 'developer' }, { id: 2, name: 'manager' }, diff --git a/api/db/fixtures/develop/shop.rb b/api/db/fixtures/develop/shop.rb index 003fa4dd3..016e6ee68 100644 --- a/api/db/fixtures/develop/shop.rb +++ b/api/db/fixtures/develop/shop.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + Shop.seed(:id, { id: 1, name: 'アピタ長岡店', tel: '0258-29-6111', diff --git a/api/db/fixtures/develop/stage.rb b/api/db/fixtures/develop/stage.rb index 95826192a..8e503c01f 100644 --- a/api/db/fixtures/develop/stage.rb +++ b/api/db/fixtures/develop/stage.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + Stage.seed(:id, { id: 1, name: '希望なし', enable_sunny: true, enable_rainy: true }, { id: 2, name: 'メインステージ', enable_sunny: true, enable_rainy: false }, diff --git a/api/db/fixtures/develop/stage_common_option.rb b/api/db/fixtures/develop/stage_common_option.rb index bac5b3963..aaa166e3d 100644 --- a/api/db/fixtures/develop/stage_common_option.rb +++ b/api/db/fixtures/develop/stage_common_option.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + StageCommonOption.seed(:id, { id: 1, group_id: 1, own_equipment: true, diff --git a/api/db/fixtures/develop/stage_order.rb b/api/db/fixtures/develop/stage_order.rb index 3c44c090b..26f9bf0fa 100644 --- a/api/db/fixtures/develop/stage_order.rb +++ b/api/db/fixtures/develop/stage_order.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + StageOrder.seed(:id, { id: 1, group_id: 1, is_sunny: true, diff --git a/api/db/fixtures/develop/stocker_item.rb b/api/db/fixtures/develop/stocker_item.rb index e1beaf289..534515e0f 100644 --- a/api/db/fixtures/develop/stocker_item.rb +++ b/api/db/fixtures/develop/stocker_item.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + StockerItem.seed(:id, { id: 1, rental_item_id: 1, stocker_place_id: 1, diff --git a/api/db/fixtures/develop/stocker_place.rb b/api/db/fixtures/develop/stocker_place.rb index 5bf21a14e..50e2d8a03 100644 --- a/api/db/fixtures/develop/stocker_place.rb +++ b/api/db/fixtures/develop/stocker_place.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + StockerPlace.seed(:id, { id: 1, name: '講義棟101', stock_item_status: 1, assign_item_status: 1 }, { id: 2, name: '講義棟102', stock_item_status: 1, assign_item_status: 1 }, diff --git a/api/db/fixtures/develop/stool_test.rb b/api/db/fixtures/develop/stool_test.rb index ab6b83e34..b59c23a43 100644 --- a/api/db/fixtures/develop/stool_test.rb +++ b/api/db/fixtures/develop/stool_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + StoolTest.seed(:id, { id: 1, status: '検便準備中' }, { id: 2, status: '検便無' }, diff --git a/api/db/fixtures/develop/sub_rep.rb b/api/db/fixtures/develop/sub_rep.rb index 13f602d4e..e964e95af 100644 --- a/api/db/fixtures/develop/sub_rep.rb +++ b/api/db/fixtures/develop/sub_rep.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + SubRep.seed(:id, { id: 1, group_id: 1, name: '技大花子', diff --git a/api/db/fixtures/develop/user.rb b/api/db/fixtures/develop/user.rb index ce66c39d9..0c88e90b3 100644 --- a/api/db/fixtures/develop/user.rb +++ b/api/db/fixtures/develop/user.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + User.seed(:id, { id: 1, name: '技大太朗(dev)', email: 'nutfes-taro@email.com', diff --git a/api/db/fixtures/develop/user_detail.rb b/api/db/fixtures/develop/user_detail.rb index cc1368a0a..b3e30dd59 100644 --- a/api/db/fixtures/develop/user_detail.rb +++ b/api/db/fixtures/develop/user_detail.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + UserDetail.seed(:id, { id: 1, tel: '11111111111', grade_id: 1, diff --git a/api/db/fixtures/develop/user_page_setting.rb b/api/db/fixtures/develop/user_page_setting.rb index 473934f23..e244f795f 100644 --- a/api/db/fixtures/develop/user_page_setting.rb +++ b/api/db/fixtures/develop/user_page_setting.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + UserPageSetting.seed(:id, { id: 1, is_regist_group: true, is_regist_food_product: true, diff --git a/api/db/fixtures/production/department.rb b/api/db/fixtures/production/department.rb index d0be8f0c2..7b6284592 100644 --- a/api/db/fixtures/production/department.rb +++ b/api/db/fixtures/production/department.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + Department.seed(:id, { id: 1, name: '機械工学分野/機械創造工学課程' }, { id: 2, name: '電気電子情報工学分野/電気電子情報工学過程' }, diff --git a/api/db/fixtures/production/fes_year_date.rb b/api/db/fixtures/production/fes_year_date.rb index 0c9b28786..72d4091bc 100644 --- a/api/db/fixtures/production/fes_year_date.rb +++ b/api/db/fixtures/production/fes_year_date.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + FesYear.seed(:id, { id: 1, year_num: 2024 }) diff --git a/api/db/fixtures/production/grade.rb b/api/db/fixtures/production/grade.rb index ed0c11a61..a331aa75c 100644 --- a/api/db/fixtures/production/grade.rb +++ b/api/db/fixtures/production/grade.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + Grade.seed(:id, { id: 1, name: 'B1[学部1年]' }, { id: 2, name: 'B2[学部2年]' }, diff --git a/api/db/fixtures/production/group_category.rb b/api/db/fixtures/production/group_category.rb index 25eb022c8..ab755c4bb 100644 --- a/api/db/fixtures/production/group_category.rb +++ b/api/db/fixtures/production/group_category.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + GroupCategory.seed(:id, { id: 1, name: '食品販売' }, { id: 2, name: '物品販売' }, diff --git a/api/db/fixtures/production/place.rb b/api/db/fixtures/production/place.rb index 1874f7fa6..3b7586759 100644 --- a/api/db/fixtures/production/place.rb +++ b/api/db/fixtures/production/place.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + Place.seed(:id, { id: 1, name: '希望なし' }, { id: 2, name: '講義棟部屋A (103講義室などの大きい講義室)' }, diff --git a/api/db/fixtures/production/place_allow_list.rb b/api/db/fixtures/production/place_allow_list.rb index d2ceff780..213ce744d 100644 --- a/api/db/fixtures/production/place_allow_list.rb +++ b/api/db/fixtures/production/place_allow_list.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + PlaceAllowList.seed(:id, { id: 1, place_id: 1, group_category_id: 1, enable: true }, { id: 2, place_id: 1, group_category_id: 2, enable: true }, diff --git a/api/db/fixtures/production/rental_item.rb b/api/db/fixtures/production/rental_item.rb index a361a761e..c2a7d92aa 100644 --- a/api/db/fixtures/production/rental_item.rb +++ b/api/db/fixtures/production/rental_item.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + RentalItem.seed(:id, { id: 1, name: '机', is_inside_shop_rentable: true, is_outside_shop_rentable: true, is_stage_rentable: true }, diff --git a/api/db/fixtures/production/rental_item_allow_list.rb b/api/db/fixtures/production/rental_item_allow_list.rb index d3cc6c349..3274d6c20 100644 --- a/api/db/fixtures/production/rental_item_allow_list.rb +++ b/api/db/fixtures/production/rental_item_allow_list.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + RentalItemAllowList.seed(:id, { id: 1, rental_item_id: 1, group_category_id: 1 }, { id: 2, rental_item_id: 1, group_category_id: 2 }, diff --git a/api/db/fixtures/production/role.rb b/api/db/fixtures/production/role.rb index 0557c9254..7496e9986 100644 --- a/api/db/fixtures/production/role.rb +++ b/api/db/fixtures/production/role.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + Role.seed(:id, { id: 1, name: 'developer' }, { id: 2, name: 'manager' }, diff --git a/api/db/fixtures/production/shop.rb b/api/db/fixtures/production/shop.rb index ff53baf02..c38736b0f 100644 --- a/api/db/fixtures/production/shop.rb +++ b/api/db/fixtures/production/shop.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + Shop.seed(:id, { id: 1, name: 'アピタ長岡店', tel: '0258-29-6111', diff --git a/api/db/fixtures/production/stage.rb b/api/db/fixtures/production/stage.rb index 3dad214ba..a59b43e52 100644 --- a/api/db/fixtures/production/stage.rb +++ b/api/db/fixtures/production/stage.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + Stage.seed(:id, { id: 1, name: '希望なし', enable_sunny: true, enable_rainy: true }, { id: 2, name: 'メインステージ', enable_sunny: true, enable_rainy: false }, diff --git a/api/db/fixtures/production/stocker_place.rb b/api/db/fixtures/production/stocker_place.rb index a2f5ca2d4..9867e91ee 100644 --- a/api/db/fixtures/production/stocker_place.rb +++ b/api/db/fixtures/production/stocker_place.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + StockerPlace.seed(:id, { id: 1, name: '講義棟103', stock_item_status: 1, assign_item_status: 1 }, { id: 2, name: '講義棟104', stock_item_status: 1, assign_item_status: 1 }, diff --git a/api/db/fixtures/production/stool_test.rb b/api/db/fixtures/production/stool_test.rb index ab6b83e34..b59c23a43 100644 --- a/api/db/fixtures/production/stool_test.rb +++ b/api/db/fixtures/production/stool_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + StoolTest.seed(:id, { id: 1, status: '検便準備中' }, { id: 2, status: '検便無' }, diff --git a/api/db/fixtures/production/user.rb b/api/db/fixtures/production/user.rb index fec1577e9..a98553076 100644 --- a/api/db/fixtures/production/user.rb +++ b/api/db/fixtures/production/user.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + User.seed(:id, { id: 1, name: '管理者', email: 'admin@email.com', diff --git a/api/db/fixtures/production/user_detail.rb b/api/db/fixtures/production/user_detail.rb index 5bd76a8bb..61a85fec8 100644 --- a/api/db/fixtures/production/user_detail.rb +++ b/api/db/fixtures/production/user_detail.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + UserDetail.seed(:id, { id: 1, tel: '11111111111', grade_id: 1, diff --git a/api/db/fixtures/production/user_page_setting.rb b/api/db/fixtures/production/user_page_setting.rb index 4e83db48c..c36eb0c0b 100644 --- a/api/db/fixtures/production/user_page_setting.rb +++ b/api/db/fixtures/production/user_page_setting.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + UserPageSetting.seed(:id, { id: 1, is_regist_group: true, is_regist_food_product: true, diff --git a/api/db/migrate/20200720152841_devise_token_auth_create_users.rb b/api/db/migrate/20200720152841_devise_token_auth_create_users.rb index 30528ead2..1a1961108 100644 --- a/api/db/migrate/20200720152841_devise_token_auth_create_users.rb +++ b/api/db/migrate/20200720152841_devise_token_auth_create_users.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class DeviseTokenAuthCreateUsers < ActiveRecord::Migration[6.0] def change create_table(:users) do |t| diff --git a/api/db/migrate/20200819154942_create_roles.rb b/api/db/migrate/20200819154942_create_roles.rb index 88aa34675..ea184a88d 100644 --- a/api/db/migrate/20200819154942_create_roles.rb +++ b/api/db/migrate/20200819154942_create_roles.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateRoles < ActiveRecord::Migration[6.0] def change create_table :roles do |t| diff --git a/api/db/migrate/20200819160209_create_user_details.rb b/api/db/migrate/20200819160209_create_user_details.rb index fd8fb73f6..7de5bbfba 100644 --- a/api/db/migrate/20200819160209_create_user_details.rb +++ b/api/db/migrate/20200819160209_create_user_details.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateUserDetails < ActiveRecord::Migration[6.0] def change create_table :user_details do |t| diff --git a/api/db/migrate/20200819181359_create_departments.rb b/api/db/migrate/20200819181359_create_departments.rb index ccc2877c2..eb4b439d9 100644 --- a/api/db/migrate/20200819181359_create_departments.rb +++ b/api/db/migrate/20200819181359_create_departments.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateDepartments < ActiveRecord::Migration[6.0] def change create_table :departments do |t| diff --git a/api/db/migrate/20200819182026_change_data_tel_to_user_detail.rb b/api/db/migrate/20200819182026_change_data_tel_to_user_detail.rb index 71e54e1b7..a7571104f 100644 --- a/api/db/migrate/20200819182026_change_data_tel_to_user_detail.rb +++ b/api/db/migrate/20200819182026_change_data_tel_to_user_detail.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class ChangeDataTelToUserDetail < ActiveRecord::Migration[6.0] def change change_column :user_details, :tel, :string diff --git a/api/db/migrate/20200819183322_create_grades.rb b/api/db/migrate/20200819183322_create_grades.rb index eeff0f2a0..88039e742 100644 --- a/api/db/migrate/20200819183322_create_grades.rb +++ b/api/db/migrate/20200819183322_create_grades.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateGrades < ActiveRecord::Migration[6.0] def change create_table :grades do |t| diff --git a/api/db/migrate/20200901115623_create_groups.rb b/api/db/migrate/20200901115623_create_groups.rb index c705772f8..2467a73da 100644 --- a/api/db/migrate/20200901115623_create_groups.rb +++ b/api/db/migrate/20200901115623_create_groups.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateGroups < ActiveRecord::Migration[6.0] def change create_table :groups do |t| diff --git a/api/db/migrate/20200901130840_create_fes_years.rb b/api/db/migrate/20200901130840_create_fes_years.rb index a11c5ff76..416adf790 100644 --- a/api/db/migrate/20200901130840_create_fes_years.rb +++ b/api/db/migrate/20200901130840_create_fes_years.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateFesYears < ActiveRecord::Migration[6.0] def change create_table :fes_years do |t| diff --git a/api/db/migrate/20200901132622_create_group_categories.rb b/api/db/migrate/20200901132622_create_group_categories.rb index 41082dcdb..5965839a0 100644 --- a/api/db/migrate/20200901132622_create_group_categories.rb +++ b/api/db/migrate/20200901132622_create_group_categories.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateGroupCategories < ActiveRecord::Migration[6.0] def change create_table :group_categories do |t| diff --git a/api/db/migrate/20200908104044_create_stage_common_options.rb b/api/db/migrate/20200908104044_create_stage_common_options.rb index 8c2a724b5..3b0c49667 100644 --- a/api/db/migrate/20200908104044_create_stage_common_options.rb +++ b/api/db/migrate/20200908104044_create_stage_common_options.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateStageCommonOptions < ActiveRecord::Migration[6.0] def change create_table :stage_common_options do |t| diff --git a/api/db/migrate/20200909071344_create_power_orders.rb b/api/db/migrate/20200909071344_create_power_orders.rb index 365263e60..c129297d2 100644 --- a/api/db/migrate/20200909071344_create_power_orders.rb +++ b/api/db/migrate/20200909071344_create_power_orders.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreatePowerOrders < ActiveRecord::Migration[6.0] def change create_table :power_orders do |t| diff --git a/api/db/migrate/20200922082227_create_sub_reps.rb b/api/db/migrate/20200922082227_create_sub_reps.rb index fb4c79b21..d1d434bf1 100644 --- a/api/db/migrate/20200922082227_create_sub_reps.rb +++ b/api/db/migrate/20200922082227_create_sub_reps.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateSubReps < ActiveRecord::Migration[6.0] def change create_table :sub_reps do |t| diff --git a/api/db/migrate/20200922084540_add_details_to_sub_reps.rb b/api/db/migrate/20200922084540_add_details_to_sub_reps.rb index a4e2bb626..34dc1af33 100644 --- a/api/db/migrate/20200922084540_add_details_to_sub_reps.rb +++ b/api/db/migrate/20200922084540_add_details_to_sub_reps.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AddDetailsToSubReps < ActiveRecord::Migration[6.0] def change add_column :sub_reps, :student_id, :integer diff --git a/api/db/migrate/20200922104844_create_employees.rb b/api/db/migrate/20200922104844_create_employees.rb index f8f8fe546..6b92cff56 100644 --- a/api/db/migrate/20200922104844_create_employees.rb +++ b/api/db/migrate/20200922104844_create_employees.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateEmployees < ActiveRecord::Migration[6.0] def change create_table :employees do |t| diff --git a/api/db/migrate/20200929082751_add_student_id_to_user_details.rb b/api/db/migrate/20200929082751_add_student_id_to_user_details.rb index fe08a8270..14daccb1f 100644 --- a/api/db/migrate/20200929082751_add_student_id_to_user_details.rb +++ b/api/db/migrate/20200929082751_add_student_id_to_user_details.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AddStudentIdToUserDetails < ActiveRecord::Migration[6.0] def change add_column :user_details, :student_id, :integer diff --git a/api/db/migrate/20200929112608_create_places.rb b/api/db/migrate/20200929112608_create_places.rb index 0becade8d..30a0d9c76 100644 --- a/api/db/migrate/20200929112608_create_places.rb +++ b/api/db/migrate/20200929112608_create_places.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreatePlaces < ActiveRecord::Migration[6.0] def change create_table :places do |t| diff --git a/api/db/migrate/20201006073800_create_place_orders.rb b/api/db/migrate/20201006073800_create_place_orders.rb index 7ddb8b7e5..4ec56934f 100644 --- a/api/db/migrate/20201006073800_create_place_orders.rb +++ b/api/db/migrate/20201006073800_create_place_orders.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreatePlaceOrders < ActiveRecord::Migration[6.0] def change create_table :place_orders do |t| diff --git a/api/db/migrate/20201006074956_create_assign_group_places.rb b/api/db/migrate/20201006074956_create_assign_group_places.rb index 96cf9bac2..017e06cf1 100644 --- a/api/db/migrate/20201006074956_create_assign_group_places.rb +++ b/api/db/migrate/20201006074956_create_assign_group_places.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateAssignGroupPlaces < ActiveRecord::Migration[6.0] def change create_table :assign_group_places do |t| diff --git a/api/db/migrate/20201006080344_create_place_allow_lists.rb b/api/db/migrate/20201006080344_create_place_allow_lists.rb index 2aab34e00..ac3752e9f 100644 --- a/api/db/migrate/20201006080344_create_place_allow_lists.rb +++ b/api/db/migrate/20201006080344_create_place_allow_lists.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreatePlaceAllowLists < ActiveRecord::Migration[6.0] def change create_table :place_allow_lists do |t| diff --git a/api/db/migrate/20201020111348_rename_manufacture_column_to_power_orders.rb b/api/db/migrate/20201020111348_rename_manufacture_column_to_power_orders.rb index 8ea9b0db9..77087fda5 100644 --- a/api/db/migrate/20201020111348_rename_manufacture_column_to_power_orders.rb +++ b/api/db/migrate/20201020111348_rename_manufacture_column_to_power_orders.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class RenameManufactureColumnToPowerOrders < ActiveRecord::Migration[6.0] def change rename_column :power_orders, :manufacture, :manufacturer diff --git a/api/db/migrate/20201020114034_add_item_url_to_power_orders.rb b/api/db/migrate/20201020114034_add_item_url_to_power_orders.rb index 874eb8357..8ce84226f 100644 --- a/api/db/migrate/20201020114034_add_item_url_to_power_orders.rb +++ b/api/db/migrate/20201020114034_add_item_url_to_power_orders.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AddItemUrlToPowerOrders < ActiveRecord::Migration[6.0] def change add_column :power_orders, :item_url, :string diff --git a/api/db/migrate/20201103063647_remove_employee_category_id_from_employees.rb b/api/db/migrate/20201103063647_remove_employee_category_id_from_employees.rb index a5a890305..47035185d 100644 --- a/api/db/migrate/20201103063647_remove_employee_category_id_from_employees.rb +++ b/api/db/migrate/20201103063647_remove_employee_category_id_from_employees.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class RemoveEmployeeCategoryIdFromEmployees < ActiveRecord::Migration[6.0] def change remove_column :employees, :employee_category_id, :integer diff --git a/api/db/migrate/20201103073931_create_stages.rb b/api/db/migrate/20201103073931_create_stages.rb index 0e3bbf5df..d1c431eb7 100644 --- a/api/db/migrate/20201103073931_create_stages.rb +++ b/api/db/migrate/20201103073931_create_stages.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateStages < ActiveRecord::Migration[6.0] def change create_table :stages do |t| diff --git a/api/db/migrate/20201103081819_create_fes_dates.rb b/api/db/migrate/20201103081819_create_fes_dates.rb index 7602f8575..8bc8977d8 100644 --- a/api/db/migrate/20201103081819_create_fes_dates.rb +++ b/api/db/migrate/20201103081819_create_fes_dates.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateFesDates < ActiveRecord::Migration[6.0] def change create_table :fes_dates do |t| diff --git a/api/db/migrate/20201106070551_create_stage_orders.rb b/api/db/migrate/20201106070551_create_stage_orders.rb index 9e5af4f27..ca27d6153 100644 --- a/api/db/migrate/20201106070551_create_stage_orders.rb +++ b/api/db/migrate/20201106070551_create_stage_orders.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateStageOrders < ActiveRecord::Migration[6.0] def change create_table :stage_orders do |t| diff --git a/api/db/migrate/20201106075546_create_assign_stages.rb b/api/db/migrate/20201106075546_create_assign_stages.rb index 4223433cf..51a006f29 100644 --- a/api/db/migrate/20201106075546_create_assign_stages.rb +++ b/api/db/migrate/20201106075546_create_assign_stages.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateAssignStages < ActiveRecord::Migration[6.0] def change create_table :assign_stages do |t| diff --git a/api/db/migrate/20201118104455_create_food_products.rb b/api/db/migrate/20201118104455_create_food_products.rb index 7415f05f3..aa89399b9 100644 --- a/api/db/migrate/20201118104455_create_food_products.rb +++ b/api/db/migrate/20201118104455_create_food_products.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateFoodProducts < ActiveRecord::Migration[6.0] def change create_table :food_products do |t| diff --git a/api/db/migrate/20201118105401_create_purchase_lists.rb b/api/db/migrate/20201118105401_create_purchase_lists.rb index c10b3eb87..1ca1eda5c 100644 --- a/api/db/migrate/20201118105401_create_purchase_lists.rb +++ b/api/db/migrate/20201118105401_create_purchase_lists.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreatePurchaseLists < ActiveRecord::Migration[6.0] def change create_table :purchase_lists do |t| diff --git a/api/db/migrate/20201124082556_create_shops.rb b/api/db/migrate/20201124082556_create_shops.rb index e5d8aebba..1c7760aa0 100644 --- a/api/db/migrate/20201124082556_create_shops.rb +++ b/api/db/migrate/20201124082556_create_shops.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateShops < ActiveRecord::Migration[6.0] def change create_table :shops do |t| diff --git a/api/db/migrate/20201124110324_create_rental_items.rb b/api/db/migrate/20201124110324_create_rental_items.rb index fd53e9402..f93b010e8 100644 --- a/api/db/migrate/20201124110324_create_rental_items.rb +++ b/api/db/migrate/20201124110324_create_rental_items.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateRentalItems < ActiveRecord::Migration[6.0] def change create_table :rental_items do |t| diff --git a/api/db/migrate/20201124113027_create_rental_item_allow_lists.rb b/api/db/migrate/20201124113027_create_rental_item_allow_lists.rb index abef1e3ee..0963af843 100644 --- a/api/db/migrate/20201124113027_create_rental_item_allow_lists.rb +++ b/api/db/migrate/20201124113027_create_rental_item_allow_lists.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateRentalItemAllowLists < ActiveRecord::Migration[6.0] def change create_table :rental_item_allow_lists do |t| diff --git a/api/db/migrate/20201129024331_create_rental_orders.rb b/api/db/migrate/20201129024331_create_rental_orders.rb index dabf52bc6..d2ccc7348 100644 --- a/api/db/migrate/20201129024331_create_rental_orders.rb +++ b/api/db/migrate/20201129024331_create_rental_orders.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateRentalOrders < ActiveRecord::Migration[6.0] def change create_table :rental_orders do |t| diff --git a/api/db/migrate/20201129035145_create_stocker_places.rb b/api/db/migrate/20201129035145_create_stocker_places.rb index 37d878b56..d53fc8343 100644 --- a/api/db/migrate/20201129035145_create_stocker_places.rb +++ b/api/db/migrate/20201129035145_create_stocker_places.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateStockerPlaces < ActiveRecord::Migration[6.0] def change create_table :stocker_places do |t| diff --git a/api/db/migrate/20201129050024_create_news.rb b/api/db/migrate/20201129050024_create_news.rb index 79229504c..8c9d17dac 100644 --- a/api/db/migrate/20201129050024_create_news.rb +++ b/api/db/migrate/20201129050024_create_news.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateNews < ActiveRecord::Migration[6.0] def change create_table :news do |t| diff --git a/api/db/migrate/20201129061920_create_stocker_items.rb b/api/db/migrate/20201129061920_create_stocker_items.rb index 0a36e4454..2f906992e 100644 --- a/api/db/migrate/20201129061920_create_stocker_items.rb +++ b/api/db/migrate/20201129061920_create_stocker_items.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateStockerItems < ActiveRecord::Migration[6.0] def change create_table :stocker_items do |t| diff --git a/api/db/migrate/20201129070231_create_rentable_items.rb b/api/db/migrate/20201129070231_create_rentable_items.rb index 77e59afbe..74d07bdcf 100644 --- a/api/db/migrate/20201129070231_create_rentable_items.rb +++ b/api/db/migrate/20201129070231_create_rentable_items.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateRentableItems < ActiveRecord::Migration[6.0] def change create_table :rentable_items do |t| diff --git a/api/db/migrate/20201129073820_create_assign_rental_items.rb b/api/db/migrate/20201129073820_create_assign_rental_items.rb index 9246e04a0..9fa994419 100644 --- a/api/db/migrate/20201129073820_create_assign_rental_items.rb +++ b/api/db/migrate/20201129073820_create_assign_rental_items.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateAssignRentalItems < ActiveRecord::Migration[6.0] def change create_table :assign_rental_items do |t| diff --git a/api/db/migrate/20210203150104_create_memos.rb b/api/db/migrate/20210203150104_create_memos.rb index b0cf8380d..6a751bfef 100644 --- a/api/db/migrate/20210203150104_create_memos.rb +++ b/api/db/migrate/20210203150104_create_memos.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateMemos < ActiveRecord::Migration[6.0] def change create_table :memos do |t| diff --git a/api/db/migrate/20210206110245_change_datatype_assign_rental_itemofrental_order_id.rb b/api/db/migrate/20210206110245_change_datatype_assign_rental_itemofrental_order_id.rb index 04b3f95fa..0ba3d0371 100644 --- a/api/db/migrate/20210206110245_change_datatype_assign_rental_itemofrental_order_id.rb +++ b/api/db/migrate/20210206110245_change_datatype_assign_rental_itemofrental_order_id.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class ChangeDatatypeAssignRentalItemofrentalOrderId < ActiveRecord::Migration[6.0] def change rename_column :assign_rental_items, :rental_order_id, :group_id diff --git a/api/db/migrate/20210206114232_rename_rentable_item_id_column_to_assign_rental_items.rb b/api/db/migrate/20210206114232_rename_rentable_item_id_column_to_assign_rental_items.rb index 1fbe17fcd..7b9241700 100644 --- a/api/db/migrate/20210206114232_rename_rentable_item_id_column_to_assign_rental_items.rb +++ b/api/db/migrate/20210206114232_rename_rentable_item_id_column_to_assign_rental_items.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class RenameRentableItemIdColumnToAssignRentalItems < ActiveRecord::Migration[6.0] def change rename_column :assign_rental_items, :rentable_item_id, :rental_item_id diff --git a/api/db/migrate/20210206162027_add_stocker_place_id_to_assign_rental_item.rb b/api/db/migrate/20210206162027_add_stocker_place_id_to_assign_rental_item.rb index 820cfc295..ed0d2242f 100644 --- a/api/db/migrate/20210206162027_add_stocker_place_id_to_assign_rental_item.rb +++ b/api/db/migrate/20210206162027_add_stocker_place_id_to_assign_rental_item.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AddStockerPlaceIdToAssignRentalItem < ActiveRecord::Migration[6.0] def change add_column :assign_rental_items, :stocker_place_id, :integer diff --git a/api/db/migrate/20210214160527_add_details_to_stocker_places.rb b/api/db/migrate/20210214160527_add_details_to_stocker_places.rb index 410fdd6f3..c43671322 100644 --- a/api/db/migrate/20210214160527_add_details_to_stocker_places.rb +++ b/api/db/migrate/20210214160527_add_details_to_stocker_places.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AddDetailsToStockerPlaces < ActiveRecord::Migration[6.0] def change add_column :stocker_places, :stock_item_status, :integer diff --git a/api/db/migrate/20210221070515_create_user_page_settings.rb b/api/db/migrate/20210221070515_create_user_page_settings.rb index ff341bcb6..6031d4068 100644 --- a/api/db/migrate/20210221070515_create_user_page_settings.rb +++ b/api/db/migrate/20210221070515_create_user_page_settings.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateUserPageSettings < ActiveRecord::Migration[6.0] def change create_table :user_page_settings do |t| diff --git a/api/db/migrate/20210323115616_add_columns_to_user_page_settings.rb b/api/db/migrate/20210323115616_add_columns_to_user_page_settings.rb index cb45ee728..9894e13e4 100644 --- a/api/db/migrate/20210323115616_add_columns_to_user_page_settings.rb +++ b/api/db/migrate/20210323115616_add_columns_to_user_page_settings.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AddColumnsToUserPageSettings < ActiveRecord::Migration[6.0] def change add_column :user_page_settings, :add_power_order, :boolean diff --git a/api/db/migrate/20210323143233_add_fes_year_id_to_user_page_settings.rb b/api/db/migrate/20210323143233_add_fes_year_id_to_user_page_settings.rb index ce606046c..b91cbea32 100644 --- a/api/db/migrate/20210323143233_add_fes_year_id_to_user_page_settings.rb +++ b/api/db/migrate/20210323143233_add_fes_year_id_to_user_page_settings.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AddFesYearIdToUserPageSettings < ActiveRecord::Migration[6.0] def change add_column :user_page_settings, :fes_year_id, :integer diff --git a/api/db/migrate/20220123012848_create_group_identifications.rb b/api/db/migrate/20220123012848_create_group_identifications.rb index 372bc7b0a..8050d7210 100644 --- a/api/db/migrate/20220123012848_create_group_identifications.rb +++ b/api/db/migrate/20220123012848_create_group_identifications.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateGroupIdentifications < ActiveRecord::Migration[6.1] def change create_table :group_identifications do |t| diff --git a/api/db/migrate/20220123030856_create_place_numbers.rb b/api/db/migrate/20220123030856_create_place_numbers.rb index 5179be627..e51081aa5 100644 --- a/api/db/migrate/20220123030856_create_place_numbers.rb +++ b/api/db/migrate/20220123030856_create_place_numbers.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreatePlaceNumbers < ActiveRecord::Migration[6.1] def change create_table :place_numbers do |t| diff --git a/api/db/migrate/20220125035856_create_stage_numbers.rb b/api/db/migrate/20220125035856_create_stage_numbers.rb index a95205329..3cdeea1f3 100644 --- a/api/db/migrate/20220125035856_create_stage_numbers.rb +++ b/api/db/migrate/20220125035856_create_stage_numbers.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateStageNumbers < ActiveRecord::Migration[6.1] def change create_table :stage_numbers do |t| diff --git a/api/db/migrate/20220305120323_create_public_relations.rb b/api/db/migrate/20220305120323_create_public_relations.rb index ae54356da..ad10d9844 100644 --- a/api/db/migrate/20220305120323_create_public_relations.rb +++ b/api/db/migrate/20220305120323_create_public_relations.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreatePublicRelations < ActiveRecord::Migration[6.1] def change create_table :public_relations do |t| diff --git a/api/db/migrate/20220410030808_add_column_rental_items.rb b/api/db/migrate/20220410030808_add_column_rental_items.rb index 7edd0bd38..f866723da 100644 --- a/api/db/migrate/20220410030808_add_column_rental_items.rb +++ b/api/db/migrate/20220410030808_add_column_rental_items.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AddColumnRentalItems < ActiveRecord::Migration[6.1] def change add_column :rental_items, :is_stage_rentable, :boolean diff --git a/api/db/migrate/20220410050111_create_stool_tests.rb b/api/db/migrate/20220410050111_create_stool_tests.rb index 16bfba87d..fdfbdf1ee 100644 --- a/api/db/migrate/20220410050111_create_stool_tests.rb +++ b/api/db/migrate/20220410050111_create_stool_tests.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateStoolTests < ActiveRecord::Migration[6.1] def change create_table :stool_tests do |t| diff --git a/api/db/migrate/20220410050932_add_column_employee.rb b/api/db/migrate/20220410050932_add_column_employee.rb index 8f064b2b3..59c8cc4a1 100644 --- a/api/db/migrate/20220410050932_add_column_employee.rb +++ b/api/db/migrate/20220410050932_add_column_employee.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AddColumnEmployee < ActiveRecord::Migration[6.1] def change add_column :employees, :stool_test_id, :integer diff --git a/api/db/migrate/20221028083651_add_committee_to_groups.rb b/api/db/migrate/20221028083651_add_committee_to_groups.rb index b423a63ba..bd6d7bb26 100644 --- a/api/db/migrate/20221028083651_add_committee_to_groups.rb +++ b/api/db/migrate/20221028083651_add_committee_to_groups.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AddCommitteeToGroups < ActiveRecord::Migration[6.1] def change add_column :groups, :committee, :boolean diff --git a/api/db/migrate/20230429163535_add_announcement_to_public_relations.rb b/api/db/migrate/20230429163535_add_announcement_to_public_relations.rb index 004fc95b9..78dfc84b1 100644 --- a/api/db/migrate/20230429163535_add_announcement_to_public_relations.rb +++ b/api/db/migrate/20230429163535_add_announcement_to_public_relations.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AddAnnouncementToPublicRelations < ActiveRecord::Migration[6.1] def change add_column :public_relations, :announcement, :string diff --git a/api/db/migrate/20230501042741_create_venue_maps.rb b/api/db/migrate/20230501042741_create_venue_maps.rb index 0556bc8ea..28f586830 100644 --- a/api/db/migrate/20230501042741_create_venue_maps.rb +++ b/api/db/migrate/20230501042741_create_venue_maps.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateVenueMaps < ActiveRecord::Migration[6.1] def change create_table :venue_maps do |t| diff --git a/api/db/migrate/20230501065229_remove_public_relation_from_announcement.rb b/api/db/migrate/20230501065229_remove_public_relation_from_announcement.rb index 76de85c3d..5f143f79c 100644 --- a/api/db/migrate/20230501065229_remove_public_relation_from_announcement.rb +++ b/api/db/migrate/20230501065229_remove_public_relation_from_announcement.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class RemovePublicRelationFromAnnouncement < ActiveRecord::Migration[6.1] def change remove_column :public_relations, :announcement, :string diff --git a/api/db/migrate/20230501070947_create_announcements.rb b/api/db/migrate/20230501070947_create_announcements.rb index 16d39d210..16c3b9567 100644 --- a/api/db/migrate/20230501070947_create_announcements.rb +++ b/api/db/migrate/20230501070947_create_announcements.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateAnnouncements < ActiveRecord::Migration[6.1] def change create_table :announcements do |t| diff --git a/api/db/migrate/20230514163436_add_inside_and_rename_outside_rentable_columns_to_rental_items.rb b/api/db/migrate/20230514163436_add_inside_and_rename_outside_rentable_columns_to_rental_items.rb index 65bdbb230..9d4bc7989 100644 --- a/api/db/migrate/20230514163436_add_inside_and_rename_outside_rentable_columns_to_rental_items.rb +++ b/api/db/migrate/20230514163436_add_inside_and_rename_outside_rentable_columns_to_rental_items.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AddInsideAndRenameOutsideRentableColumnsToRentalItems < ActiveRecord::Migration[6.1] def change add_column :rental_items, :is_inside_shop_rentable, :boolean diff --git a/api/db/migrate/20230514163559_remove_is_shop_rentable_from_rental_items.rb b/api/db/migrate/20230514163559_remove_is_shop_rentable_from_rental_items.rb index 76d068d28..f0ad69d86 100644 --- a/api/db/migrate/20230514163559_remove_is_shop_rentable_from_rental_items.rb +++ b/api/db/migrate/20230514163559_remove_is_shop_rentable_from_rental_items.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class RemoveIsShopRentableFromRentalItems < ActiveRecord::Migration[6.1] def change remove_column :rental_items, :is_shop_rentable, :boolean diff --git a/api/db/migrate/20230525071401_add_column_purchase_lists.rb b/api/db/migrate/20230525071401_add_column_purchase_lists.rb index 62cb4894c..dbb81f3bf 100644 --- a/api/db/migrate/20230525071401_add_column_purchase_lists.rb +++ b/api/db/migrate/20230525071401_add_column_purchase_lists.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AddColumnPurchaseLists < ActiveRecord::Migration[6.1] def change add_column :purchase_lists, :purchase_date, :string diff --git a/api/db/migrate/20230705122534_add_is_edit_announcement_to_user_page_settings.rb b/api/db/migrate/20230705122534_add_is_edit_announcement_to_user_page_settings.rb index e258a9461..15f6ba69c 100644 --- a/api/db/migrate/20230705122534_add_is_edit_announcement_to_user_page_settings.rb +++ b/api/db/migrate/20230705122534_add_is_edit_announcement_to_user_page_settings.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AddIsEditAnnouncementToUserPageSettings < ActiveRecord::Migration[6.1] def change add_column :user_page_settings, :is_edit_announcement, :boolean diff --git a/api/db/migrate/20230705131315_add_add_announcement_to_user_page_settings.rb b/api/db/migrate/20230705131315_add_add_announcement_to_user_page_settings.rb index 29697103a..c0e44b73e 100644 --- a/api/db/migrate/20230705131315_add_add_announcement_to_user_page_settings.rb +++ b/api/db/migrate/20230705131315_add_add_announcement_to_user_page_settings.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AddAddAnnouncementToUserPageSettings < ActiveRecord::Migration[6.1] def change add_column :user_page_settings, :add_announcement, :boolean diff --git a/api/db/migrate/20240307061007_create_item_adjustments.rb b/api/db/migrate/20240307061007_create_item_adjustments.rb index 5800bd94f..c88bdc9e3 100644 --- a/api/db/migrate/20240307061007_create_item_adjustments.rb +++ b/api/db/migrate/20240307061007_create_item_adjustments.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateItemAdjustments < ActiveRecord::Migration[6.1] def change create_table :item_adjustments do |t| diff --git a/api/db/migrate/20240307061926_create_current_stocks.rb b/api/db/migrate/20240307061926_create_current_stocks.rb index fb1c79cb3..fb2024af3 100644 --- a/api/db/migrate/20240307061926_create_current_stocks.rb +++ b/api/db/migrate/20240307061926_create_current_stocks.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateCurrentStocks < ActiveRecord::Migration[6.1] def change create_table :current_stocks do |t| diff --git a/api/db/migrate/20240325051858_add_is_edit_user_to_user_page_settings.rb b/api/db/migrate/20240325051858_add_is_edit_user_to_user_page_settings.rb index 60b362cc1..f198dd465 100644 --- a/api/db/migrate/20240325051858_add_is_edit_user_to_user_page_settings.rb +++ b/api/db/migrate/20240325051858_add_is_edit_user_to_user_page_settings.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AddIsEditUserToUserPageSettings < ActiveRecord::Migration[6.1] def change add_column :user_page_settings, :is_edit_user, :boolean diff --git a/api/db/migrate/20240418122445_create_cooking_process_orders.rb b/api/db/migrate/20240418122445_create_cooking_process_orders.rb index 71196cc90..4b523ddd2 100644 --- a/api/db/migrate/20240418122445_create_cooking_process_orders.rb +++ b/api/db/migrate/20240418122445_create_cooking_process_orders.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateCookingProcessOrders < ActiveRecord::Migration[6.1] def change create_table :cooking_process_orders do |t| diff --git a/api/db/migrate/20240418124539_add_is_international_to_groups.rb b/api/db/migrate/20240418124539_add_is_international_to_groups.rb index ebaefba71..d1578b2a7 100644 --- a/api/db/migrate/20240418124539_add_is_international_to_groups.rb +++ b/api/db/migrate/20240418124539_add_is_international_to_groups.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AddIsInternationalToGroups < ActiveRecord::Migration[6.1] def change add_column :groups, :is_international, :boolean diff --git a/api/db/migrate/20240507003226_add_is_external_to_groups.rb b/api/db/migrate/20240507003226_add_is_external_to_groups.rb index 5477b5cdd..674556cf6 100644 --- a/api/db/migrate/20240507003226_add_is_external_to_groups.rb +++ b/api/db/migrate/20240507003226_add_is_external_to_groups.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AddIsExternalToGroups < ActiveRecord::Migration[6.1] def change add_column :groups, :is_external, :boolean diff --git a/api/db/migrate/20240507065259_create_contact_people.rb b/api/db/migrate/20240507065259_create_contact_people.rb index 90d9be0b4..55099c3a6 100644 --- a/api/db/migrate/20240507065259_create_contact_people.rb +++ b/api/db/migrate/20240507065259_create_contact_people.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class CreateContactPeople < ActiveRecord::Migration[6.1] def change create_table :contact_people do |t| diff --git a/api/db/migrate/20240513081443_add_status_to_announcements.rb b/api/db/migrate/20240513081443_add_status_to_announcements.rb index f041d009c..9db70e0d0 100644 --- a/api/db/migrate/20240513081443_add_status_to_announcements.rb +++ b/api/db/migrate/20240513081443_add_status_to_announcements.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AddStatusToAnnouncements < ActiveRecord::Migration[6.1] def change add_column :announcements, :status, :string diff --git a/api/db/migrate/20240522012844_modify_cooking_process_orders.rb b/api/db/migrate/20240522012844_modify_cooking_process_orders.rb index 2ca1d9488..4b337ee36 100644 --- a/api/db/migrate/20240522012844_modify_cooking_process_orders.rb +++ b/api/db/migrate/20240522012844_modify_cooking_process_orders.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class ModifyCookingProcessOrders < ActiveRecord::Migration[6.1] def change change_table :cooking_process_orders do |t| diff --git a/api/db/schema.rb b/api/db/schema.rb index 7bca0c86c..0f8cfb6a9 100644 --- a/api/db/schema.rb +++ b/api/db/schema.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # This file is auto-generated from the current state of the database. Instead # of editing this file, please use the migrations feature of Active Record to # incrementally modify your database, and then regenerate this schema definition. diff --git a/api/db/seeds.rb b/api/db/seeds.rb index 1beea2acc..ebd18895a 100644 --- a/api/db/seeds.rb +++ b/api/db/seeds.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # This file should contain all the record creation needed to seed the database with its default values. # The data can then be loaded with the rails db:seed command (or created alongside the database with db:setup). # diff --git a/api/db/user.rb b/api/db/user.rb index 552d13d7a..c44f8599f 100644 --- a/api/db/user.rb +++ b/api/db/user.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + User.seed(:id, { id: 1, name: '秋本真夏', email: 'akimoto@hangout.com', password: 'hangout', password_confirmation: 'hangout', role_id: 1 }, diff --git a/api/test/channels/application_cable/connection_test.rb b/api/test/channels/application_cable/connection_test.rb index d05dbd24c..4aee9b335 100644 --- a/api/test/channels/application_cable/connection_test.rb +++ b/api/test/channels/application_cable/connection_test.rb @@ -1,11 +1,15 @@ +# frozen_string_literal: true + require 'test_helper' -class ApplicationCable::ConnectionTest < ActionCable::Connection::TestCase - # test "connects with cookies" do - # cookies.signed[:user_id] = 42 - # - # connect - # - # assert_equal connection.user_id, "42" - # end +module ApplicationCable + class ConnectionTest < ActionCable::Connection::TestCase + # test "connects with cookies" do + # cookies.signed[:user_id] = 42 + # + # connect + # + # assert_equal connection.user_id, "42" + # end + end end diff --git a/api/test/controllers/announcements_controller_test.rb b/api/test/controllers/announcements_controller_test.rb index 175d708a0..d6e8f372d 100644 --- a/api/test/controllers/announcements_controller_test.rb +++ b/api/test/controllers/announcements_controller_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class AnnouncementsControllerTest < ActionDispatch::IntegrationTest diff --git a/api/test/controllers/api/auth/registrations_controller_test.rb b/api/test/controllers/api/auth/registrations_controller_test.rb index d4a0640d2..2af06bf43 100644 --- a/api/test/controllers/api/auth/registrations_controller_test.rb +++ b/api/test/controllers/api/auth/registrations_controller_test.rb @@ -1,7 +1,13 @@ +# frozen_string_literal: true + require 'test_helper' -class Api::Auth::RegistrationsControllerTest < ActionDispatch::IntegrationTest - # test "the truth" do - # assert true - # end +module Api + module Auth + class RegistrationsControllerTest < ActionDispatch::IntegrationTest + # test "the truth" do + # assert true + # end + end + end end diff --git a/api/test/controllers/api/v1/users_controller_test.rb b/api/test/controllers/api/v1/users_controller_test.rb index f3f522280..00730b1d4 100644 --- a/api/test/controllers/api/v1/users_controller_test.rb +++ b/api/test/controllers/api/v1/users_controller_test.rb @@ -1,7 +1,13 @@ +# frozen_string_literal: true + require 'test_helper' -class Api::V1::UsersControllerTest < ActionDispatch::IntegrationTest - # test "the truth" do - # assert true - # end +module Api + module V1 + class UsersControllerTest < ActionDispatch::IntegrationTest + # test "the truth" do + # assert true + # end + end + end end diff --git a/api/test/controllers/assign_group_places_controller_test.rb b/api/test/controllers/assign_group_places_controller_test.rb index 0655dd079..95ec7fe81 100644 --- a/api/test/controllers/assign_group_places_controller_test.rb +++ b/api/test/controllers/assign_group_places_controller_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class AssignGroupPlacesControllerTest < ActionDispatch::IntegrationTest diff --git a/api/test/controllers/assign_rental_items_controller_test.rb b/api/test/controllers/assign_rental_items_controller_test.rb index 7940f5447..4a5608d0f 100644 --- a/api/test/controllers/assign_rental_items_controller_test.rb +++ b/api/test/controllers/assign_rental_items_controller_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class AssignRentalItemsControllerTest < ActionDispatch::IntegrationTest diff --git a/api/test/controllers/assign_stages_controller_test.rb b/api/test/controllers/assign_stages_controller_test.rb index 1e12ab6a1..bd727eddb 100644 --- a/api/test/controllers/assign_stages_controller_test.rb +++ b/api/test/controllers/assign_stages_controller_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class AssignStagesControllerTest < ActionDispatch::IntegrationTest diff --git a/api/test/controllers/cooking_process_orders_controller_test.rb b/api/test/controllers/cooking_process_orders_controller_test.rb index fc5401048..b41e8e922 100644 --- a/api/test/controllers/cooking_process_orders_controller_test.rb +++ b/api/test/controllers/cooking_process_orders_controller_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class CookingProcessOrdersControllerTest < ActionDispatch::IntegrationTest diff --git a/api/test/controllers/current_stocks_controller_test.rb b/api/test/controllers/current_stocks_controller_test.rb index 559be2a72..0f6aaea06 100644 --- a/api/test/controllers/current_stocks_controller_test.rb +++ b/api/test/controllers/current_stocks_controller_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class CurrentStocksControllerTest < ActionDispatch::IntegrationTest diff --git a/api/test/controllers/employees_controller_test.rb b/api/test/controllers/employees_controller_test.rb index b990ae319..c66f5ddff 100644 --- a/api/test/controllers/employees_controller_test.rb +++ b/api/test/controllers/employees_controller_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class EmployeesControllerTest < ActionDispatch::IntegrationTest diff --git a/api/test/controllers/food_products_controller_test.rb b/api/test/controllers/food_products_controller_test.rb index 9ae2b991c..5bdda25ba 100644 --- a/api/test/controllers/food_products_controller_test.rb +++ b/api/test/controllers/food_products_controller_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class FoodProductsControllerTest < ActionDispatch::IntegrationTest diff --git a/api/test/controllers/group_categories_controller_test.rb b/api/test/controllers/group_categories_controller_test.rb index b340d6e2b..465a48098 100644 --- a/api/test/controllers/group_categories_controller_test.rb +++ b/api/test/controllers/group_categories_controller_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class GroupCategoriesControllerTest < ActionDispatch::IntegrationTest diff --git a/api/test/controllers/group_identification_controller_test.rb b/api/test/controllers/group_identification_controller_test.rb index fad30325f..f429efb2d 100644 --- a/api/test/controllers/group_identification_controller_test.rb +++ b/api/test/controllers/group_identification_controller_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class GroupIdentificationControllerTest < ActionDispatch::IntegrationTest diff --git a/api/test/controllers/groups_controller_test.rb b/api/test/controllers/groups_controller_test.rb index 3d2ca5e66..6d1e9c511 100644 --- a/api/test/controllers/groups_controller_test.rb +++ b/api/test/controllers/groups_controller_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class GroupsControllerTest < ActionDispatch::IntegrationTest diff --git a/api/test/controllers/memos_controller_test.rb b/api/test/controllers/memos_controller_test.rb index d8cb7eaee..74b32e5f6 100644 --- a/api/test/controllers/memos_controller_test.rb +++ b/api/test/controllers/memos_controller_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class MemosControllerTest < ActionDispatch::IntegrationTest diff --git a/api/test/controllers/news_controller_test.rb b/api/test/controllers/news_controller_test.rb index 70fe45274..10d39364b 100644 --- a/api/test/controllers/news_controller_test.rb +++ b/api/test/controllers/news_controller_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class NewsControllerTest < ActionDispatch::IntegrationTest diff --git a/api/test/controllers/place_allow_lists_controller_test.rb b/api/test/controllers/place_allow_lists_controller_test.rb index 04f56ed2c..6dc4e1fc4 100644 --- a/api/test/controllers/place_allow_lists_controller_test.rb +++ b/api/test/controllers/place_allow_lists_controller_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class PlaceAllowListsControllerTest < ActionDispatch::IntegrationTest diff --git a/api/test/controllers/place_number_controller_test.rb b/api/test/controllers/place_number_controller_test.rb index 27edd853a..67394938b 100644 --- a/api/test/controllers/place_number_controller_test.rb +++ b/api/test/controllers/place_number_controller_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class PlaceNumberControllerTest < ActionDispatch::IntegrationTest diff --git a/api/test/controllers/place_orders_controller_test.rb b/api/test/controllers/place_orders_controller_test.rb index 59c7b2bca..ad3902b16 100644 --- a/api/test/controllers/place_orders_controller_test.rb +++ b/api/test/controllers/place_orders_controller_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class PlaceOrdersControllerTest < ActionDispatch::IntegrationTest diff --git a/api/test/controllers/power_orders_controller_test.rb b/api/test/controllers/power_orders_controller_test.rb index 66fc74966..409ecbbdc 100644 --- a/api/test/controllers/power_orders_controller_test.rb +++ b/api/test/controllers/power_orders_controller_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class PowerOrdersControllerTest < ActionDispatch::IntegrationTest diff --git a/api/test/controllers/public_relations_controller_test.rb b/api/test/controllers/public_relations_controller_test.rb index 83717ce65..2b30eb8f5 100644 --- a/api/test/controllers/public_relations_controller_test.rb +++ b/api/test/controllers/public_relations_controller_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class PublicRelationsControllerTest < ActionDispatch::IntegrationTest diff --git a/api/test/controllers/purchase_lists_controller_test.rb b/api/test/controllers/purchase_lists_controller_test.rb index 620223125..b813f0bb4 100644 --- a/api/test/controllers/purchase_lists_controller_test.rb +++ b/api/test/controllers/purchase_lists_controller_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class PurchaseListsControllerTest < ActionDispatch::IntegrationTest diff --git a/api/test/controllers/rentable_items_controller_test.rb b/api/test/controllers/rentable_items_controller_test.rb index 0f625cf24..28641af0d 100644 --- a/api/test/controllers/rentable_items_controller_test.rb +++ b/api/test/controllers/rentable_items_controller_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class RentableItemsControllerTest < ActionDispatch::IntegrationTest diff --git a/api/test/controllers/rental_orders_controller_test.rb b/api/test/controllers/rental_orders_controller_test.rb index 5c5322cf0..0556b84f9 100644 --- a/api/test/controllers/rental_orders_controller_test.rb +++ b/api/test/controllers/rental_orders_controller_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class RentalOrdersControllerTest < ActionDispatch::IntegrationTest diff --git a/api/test/controllers/stage_common_options_controller_test.rb b/api/test/controllers/stage_common_options_controller_test.rb index 82d32b29d..404369791 100644 --- a/api/test/controllers/stage_common_options_controller_test.rb +++ b/api/test/controllers/stage_common_options_controller_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class StageCommonOptionsControllerTest < ActionDispatch::IntegrationTest diff --git a/api/test/controllers/stage_number_controller_test.rb b/api/test/controllers/stage_number_controller_test.rb index e124eead6..c7c7aa185 100644 --- a/api/test/controllers/stage_number_controller_test.rb +++ b/api/test/controllers/stage_number_controller_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class StageNumberControllerTest < ActionDispatch::IntegrationTest diff --git a/api/test/controllers/stage_orders_controller_test.rb b/api/test/controllers/stage_orders_controller_test.rb index ba68db496..ee58727e7 100644 --- a/api/test/controllers/stage_orders_controller_test.rb +++ b/api/test/controllers/stage_orders_controller_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class StageOrdersControllerTest < ActionDispatch::IntegrationTest diff --git a/api/test/controllers/stocker_items_controller_test.rb b/api/test/controllers/stocker_items_controller_test.rb index f6b2f710f..6669d5278 100644 --- a/api/test/controllers/stocker_items_controller_test.rb +++ b/api/test/controllers/stocker_items_controller_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class StockerItemsControllerTest < ActionDispatch::IntegrationTest diff --git a/api/test/controllers/sub_reps_controller_test.rb b/api/test/controllers/sub_reps_controller_test.rb index 16873ae34..1c83b6524 100644 --- a/api/test/controllers/sub_reps_controller_test.rb +++ b/api/test/controllers/sub_reps_controller_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class SubRepsControllerTest < ActionDispatch::IntegrationTest diff --git a/api/test/controllers/user_details_controller_test.rb b/api/test/controllers/user_details_controller_test.rb index 4e2707b57..3751588fd 100644 --- a/api/test/controllers/user_details_controller_test.rb +++ b/api/test/controllers/user_details_controller_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class UserDetailsControllerTest < ActionDispatch::IntegrationTest diff --git a/api/test/controllers/user_page_settings_controller_test.rb b/api/test/controllers/user_page_settings_controller_test.rb index 15a925ea4..1552bdfde 100644 --- a/api/test/controllers/user_page_settings_controller_test.rb +++ b/api/test/controllers/user_page_settings_controller_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class UserPageSettingsControllerTest < ActionDispatch::IntegrationTest diff --git a/api/test/controllers/venue_maps_controller_test.rb b/api/test/controllers/venue_maps_controller_test.rb index 0f9b02662..008120998 100644 --- a/api/test/controllers/venue_maps_controller_test.rb +++ b/api/test/controllers/venue_maps_controller_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class VenueMapsControllerTest < ActionDispatch::IntegrationTest diff --git a/api/test/models/announcement_test.rb b/api/test/models/announcement_test.rb index ed6980bc5..5db801bb8 100644 --- a/api/test/models/announcement_test.rb +++ b/api/test/models/announcement_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class AnnouncementTest < ActiveSupport::TestCase diff --git a/api/test/models/assign_group_place_test.rb b/api/test/models/assign_group_place_test.rb index 7783ba1cb..ae7df1be9 100644 --- a/api/test/models/assign_group_place_test.rb +++ b/api/test/models/assign_group_place_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class AssignGroupPlaceTest < ActiveSupport::TestCase diff --git a/api/test/models/assign_rental_item_test.rb b/api/test/models/assign_rental_item_test.rb index 19274658f..0001774ba 100644 --- a/api/test/models/assign_rental_item_test.rb +++ b/api/test/models/assign_rental_item_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class AssignRentalItemTest < ActiveSupport::TestCase diff --git a/api/test/models/assign_stage_test.rb b/api/test/models/assign_stage_test.rb index 9bfe2d6d1..455b1174b 100644 --- a/api/test/models/assign_stage_test.rb +++ b/api/test/models/assign_stage_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class AssignStageTest < ActiveSupport::TestCase diff --git a/api/test/models/contact_person_test.rb b/api/test/models/contact_person_test.rb index 8ebd67739..e47225268 100644 --- a/api/test/models/contact_person_test.rb +++ b/api/test/models/contact_person_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class ContactPersonTest < ActiveSupport::TestCase diff --git a/api/test/models/cooking_process_order_test.rb b/api/test/models/cooking_process_order_test.rb index d79599153..9e81f2e85 100644 --- a/api/test/models/cooking_process_order_test.rb +++ b/api/test/models/cooking_process_order_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class CookingProcessOrderTest < ActiveSupport::TestCase diff --git a/api/test/models/current_stock_test.rb b/api/test/models/current_stock_test.rb index 513355ccb..6ab35fd3d 100644 --- a/api/test/models/current_stock_test.rb +++ b/api/test/models/current_stock_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class CurrentStockTest < ActiveSupport::TestCase diff --git a/api/test/models/department_test.rb b/api/test/models/department_test.rb index 8075bde91..1a8ce46fc 100644 --- a/api/test/models/department_test.rb +++ b/api/test/models/department_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class DepartmentTest < ActiveSupport::TestCase diff --git a/api/test/models/employee_test.rb b/api/test/models/employee_test.rb index c1674c385..c189f42ac 100644 --- a/api/test/models/employee_test.rb +++ b/api/test/models/employee_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class EmployeeTest < ActiveSupport::TestCase diff --git a/api/test/models/fes_date_test.rb b/api/test/models/fes_date_test.rb index c02524677..e5c91f248 100644 --- a/api/test/models/fes_date_test.rb +++ b/api/test/models/fes_date_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class FesDateTest < ActiveSupport::TestCase diff --git a/api/test/models/fes_year_test.rb b/api/test/models/fes_year_test.rb index 5041aa463..273f2f96f 100644 --- a/api/test/models/fes_year_test.rb +++ b/api/test/models/fes_year_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class FesYearTest < ActiveSupport::TestCase diff --git a/api/test/models/food_product_test.rb b/api/test/models/food_product_test.rb index d1391e942..6bd6ea134 100644 --- a/api/test/models/food_product_test.rb +++ b/api/test/models/food_product_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class FoodProductTest < ActiveSupport::TestCase diff --git a/api/test/models/grade_test.rb b/api/test/models/grade_test.rb index e9528e451..f19d49080 100644 --- a/api/test/models/grade_test.rb +++ b/api/test/models/grade_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class GradeTest < ActiveSupport::TestCase diff --git a/api/test/models/group_category_test.rb b/api/test/models/group_category_test.rb index 8a9103d07..d4c40010d 100644 --- a/api/test/models/group_category_test.rb +++ b/api/test/models/group_category_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class GroupCategoryTest < ActiveSupport::TestCase diff --git a/api/test/models/group_identification_test.rb b/api/test/models/group_identification_test.rb index 0ebadccea..3a0b1de62 100644 --- a/api/test/models/group_identification_test.rb +++ b/api/test/models/group_identification_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class GroupIdentificationTest < ActiveSupport::TestCase diff --git a/api/test/models/group_test.rb b/api/test/models/group_test.rb index 778eb0c58..ae9150765 100644 --- a/api/test/models/group_test.rb +++ b/api/test/models/group_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class GroupTest < ActiveSupport::TestCase diff --git a/api/test/models/item_adjustment_test.rb b/api/test/models/item_adjustment_test.rb index 2857c2c79..8ce4e18bc 100644 --- a/api/test/models/item_adjustment_test.rb +++ b/api/test/models/item_adjustment_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class ItemAdjustmentTest < ActiveSupport::TestCase diff --git a/api/test/models/memo_test.rb b/api/test/models/memo_test.rb index b3f59b9d8..b556fae3d 100644 --- a/api/test/models/memo_test.rb +++ b/api/test/models/memo_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class MemoTest < ActiveSupport::TestCase diff --git a/api/test/models/news_test.rb b/api/test/models/news_test.rb index a2ec1c0ad..6d2979b8a 100644 --- a/api/test/models/news_test.rb +++ b/api/test/models/news_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class NewsTest < ActiveSupport::TestCase diff --git a/api/test/models/place_allow_list_test.rb b/api/test/models/place_allow_list_test.rb index 2afa203ee..bbc1e47a1 100644 --- a/api/test/models/place_allow_list_test.rb +++ b/api/test/models/place_allow_list_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class PlaceAllowListTest < ActiveSupport::TestCase diff --git a/api/test/models/place_number_test.rb b/api/test/models/place_number_test.rb index 2e99f2d47..078d2cd64 100644 --- a/api/test/models/place_number_test.rb +++ b/api/test/models/place_number_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class PlaceNumberTest < ActiveSupport::TestCase diff --git a/api/test/models/place_order_test.rb b/api/test/models/place_order_test.rb index 5fc274e02..9ef3e3794 100644 --- a/api/test/models/place_order_test.rb +++ b/api/test/models/place_order_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class PlaceOrderTest < ActiveSupport::TestCase diff --git a/api/test/models/place_test.rb b/api/test/models/place_test.rb index b086a7012..a1c7ae127 100644 --- a/api/test/models/place_test.rb +++ b/api/test/models/place_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class PlaceTest < ActiveSupport::TestCase diff --git a/api/test/models/power_order_test.rb b/api/test/models/power_order_test.rb index 6aaedb793..4c427a9a2 100644 --- a/api/test/models/power_order_test.rb +++ b/api/test/models/power_order_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class PowerOrderTest < ActiveSupport::TestCase diff --git a/api/test/models/public_relation_test.rb b/api/test/models/public_relation_test.rb index 563436f0a..1841d0ab0 100644 --- a/api/test/models/public_relation_test.rb +++ b/api/test/models/public_relation_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class PublicRelationTest < ActiveSupport::TestCase diff --git a/api/test/models/purchase_list_test.rb b/api/test/models/purchase_list_test.rb index 26f54079c..0edc623b8 100644 --- a/api/test/models/purchase_list_test.rb +++ b/api/test/models/purchase_list_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class PurchaseListTest < ActiveSupport::TestCase diff --git a/api/test/models/rentable_item_test.rb b/api/test/models/rentable_item_test.rb index 1a34474d9..6628bd511 100644 --- a/api/test/models/rentable_item_test.rb +++ b/api/test/models/rentable_item_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class RentableItemTest < ActiveSupport::TestCase diff --git a/api/test/models/rental_item_allow_list_test.rb b/api/test/models/rental_item_allow_list_test.rb index 73ae43d9d..2ddb06bd4 100644 --- a/api/test/models/rental_item_allow_list_test.rb +++ b/api/test/models/rental_item_allow_list_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class RentalItemAllowListTest < ActiveSupport::TestCase diff --git a/api/test/models/rental_item_test.rb b/api/test/models/rental_item_test.rb index 35f996e5d..52e945829 100644 --- a/api/test/models/rental_item_test.rb +++ b/api/test/models/rental_item_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class RentalItemTest < ActiveSupport::TestCase diff --git a/api/test/models/rental_order_test.rb b/api/test/models/rental_order_test.rb index 1e75c3842..3bfc80426 100644 --- a/api/test/models/rental_order_test.rb +++ b/api/test/models/rental_order_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class RentalOrderTest < ActiveSupport::TestCase diff --git a/api/test/models/role_test.rb b/api/test/models/role_test.rb index 11c53a8b5..d653142b0 100644 --- a/api/test/models/role_test.rb +++ b/api/test/models/role_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class RoleTest < ActiveSupport::TestCase diff --git a/api/test/models/shop_test.rb b/api/test/models/shop_test.rb index 7dcc4d007..3b8a7534d 100644 --- a/api/test/models/shop_test.rb +++ b/api/test/models/shop_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class ShopTest < ActiveSupport::TestCase diff --git a/api/test/models/stage_common_option_test.rb b/api/test/models/stage_common_option_test.rb index 3fefc4a4d..fa7407c63 100644 --- a/api/test/models/stage_common_option_test.rb +++ b/api/test/models/stage_common_option_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class StageCommonOptionTest < ActiveSupport::TestCase diff --git a/api/test/models/stage_number_test.rb b/api/test/models/stage_number_test.rb index b568a2458..e9d0e7427 100644 --- a/api/test/models/stage_number_test.rb +++ b/api/test/models/stage_number_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class StageNumberTest < ActiveSupport::TestCase diff --git a/api/test/models/stage_order_test.rb b/api/test/models/stage_order_test.rb index 94fa7b729..b1205bc8d 100644 --- a/api/test/models/stage_order_test.rb +++ b/api/test/models/stage_order_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class StageOrderTest < ActiveSupport::TestCase diff --git a/api/test/models/stage_test.rb b/api/test/models/stage_test.rb index 7bd58f393..4d8d10be1 100644 --- a/api/test/models/stage_test.rb +++ b/api/test/models/stage_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class StageTest < ActiveSupport::TestCase diff --git a/api/test/models/stocker_item_test.rb b/api/test/models/stocker_item_test.rb index 9a5321a96..be500d736 100644 --- a/api/test/models/stocker_item_test.rb +++ b/api/test/models/stocker_item_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class StockerItemTest < ActiveSupport::TestCase diff --git a/api/test/models/stocker_place_test.rb b/api/test/models/stocker_place_test.rb index 7e3ca1e4c..c51c21946 100644 --- a/api/test/models/stocker_place_test.rb +++ b/api/test/models/stocker_place_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class StockerPlaceTest < ActiveSupport::TestCase diff --git a/api/test/models/stool_test_test.rb b/api/test/models/stool_test_test.rb index c1bbb9847..baa69a3cb 100644 --- a/api/test/models/stool_test_test.rb +++ b/api/test/models/stool_test_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class StoolTestTest < ActiveSupport::TestCase diff --git a/api/test/models/sub_rep_test.rb b/api/test/models/sub_rep_test.rb index ddc043817..b8ce242a3 100644 --- a/api/test/models/sub_rep_test.rb +++ b/api/test/models/sub_rep_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class SubRepTest < ActiveSupport::TestCase diff --git a/api/test/models/user_detail_test.rb b/api/test/models/user_detail_test.rb index affb4cf99..f6154fc96 100644 --- a/api/test/models/user_detail_test.rb +++ b/api/test/models/user_detail_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class UserDetailTest < ActiveSupport::TestCase diff --git a/api/test/models/user_page_setting_test.rb b/api/test/models/user_page_setting_test.rb index 8cde089d2..569c51b1e 100644 --- a/api/test/models/user_page_setting_test.rb +++ b/api/test/models/user_page_setting_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class UserPageSettingTest < ActiveSupport::TestCase diff --git a/api/test/models/venue_map_test.rb b/api/test/models/venue_map_test.rb index 0a8a07c01..729f26302 100644 --- a/api/test/models/venue_map_test.rb +++ b/api/test/models/venue_map_test.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'test_helper' class VenueMapTest < ActiveSupport::TestCase diff --git a/api/test/test_helper.rb b/api/test/test_helper.rb index d5300f88c..0c92e8e88 100644 --- a/api/test/test_helper.rb +++ b/api/test/test_helper.rb @@ -1,13 +1,17 @@ +# frozen_string_literal: true + ENV['RAILS_ENV'] ||= 'test' require_relative '../config/environment' require 'rails/test_help' -class ActiveSupport::TestCase - # Run tests in parallel with specified workers - parallelize(workers: :number_of_processors) +module ActiveSupport + class TestCase + # Run tests in parallel with specified workers + parallelize(workers: :number_of_processors) - # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order. - fixtures :all + # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order. + fixtures :all - # Add more helper methods to be used by all tests here... + # Add more helper methods to be used by all tests here... + end end From bc2d87624cc103e178445c088b45fe84ea1bbab5 Mon Sep 17 00:00:00 2001 From: nose221834 Date: Mon, 7 Apr 2025 02:26:54 +0900 Subject: [PATCH 004/285] =?UTF-8?q?fix:=20=E4=BF=9D=E5=AD=98=E6=99=82?= =?UTF-8?q?=E3=81=AE=E3=82=A2=E3=82=AF=E3=82=B7=E3=83=A7=E3=83=B3=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index e8e669e13..f58353d4c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,6 +10,16 @@ // Prettierの設定ファイルを指定 "prettier.configPath": "./user/.prettierrc.json", + // 自動保存時に実行するアクションを設定 + "editor.codeActionsOnSave": { + // eslintの自動修正を有効化 + "source.fixAll.eslint": "explicit", + // Prettierの自動修正を有効化 + "source.fixAll.prettier": "explicit", + // importの整理を有効化 + "source.organizeImports": "explicit" + }, + // 以下、各拡張子ごとに明示的に設定 "[javascript]": { "editor.formatOnSave": true, @@ -35,9 +45,6 @@ "editor.formatOnSave": true, "editor.defaultFormatter": "esbenp.prettier-vscode" }, - "editor.codeActionsOnSave": { - "source.organizeImports.biome": "explicit" - }, "[github-actions-workflow]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, From 17851d98c69f6d76564ad3f2153200758cc75677 Mon Sep 17 00:00:00 2001 From: nose221834 Date: Sun, 13 Apr 2025 01:42:08 +0900 Subject: [PATCH 005/285] =?UTF-8?q?fix:=20copilot=E3=81=8C=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E3=81=97=E3=81=9F=E3=82=A8=E3=83=A9=E3=83=BC=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/app/controllers/api/v1/employees_api_controller.rb | 2 +- api/app/controllers/api/v1/output_csv_controller.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/api/app/controllers/api/v1/employees_api_controller.rb b/api/app/controllers/api/v1/employees_api_controller.rb index 7da748a27..bf4a52642 100644 --- a/api/app/controllers/api/v1/employees_api_controller.rb +++ b/api/app/controllers/api/v1/employees_api_controller.rb @@ -37,7 +37,7 @@ def get_refinement_employees end if @employees.count.zero? - render json: fmt(not_found, [], 'Not found empolees') + render json: fmt(not_found, [], 'Not found employees') else render json: fmt(ok, fit_employee_index_for_admin_view(@employees)) end diff --git a/api/app/controllers/api/v1/output_csv_controller.rb b/api/app/controllers/api/v1/output_csv_controller.rb index ee8a8ed35..8aa6e5400 100644 --- a/api/app/controllers/api/v1/output_csv_controller.rb +++ b/api/app/controllers/api/v1/output_csv_controller.rb @@ -75,7 +75,7 @@ def output_assign_rental_items_csv end def output_sub_reps_csv - if params[:fes_year_id].to_id.zero? + if params[:fes_year_id].to_i.zero? @sub_reps = Group.preload(:sub_rep).map(&:sub_rep) filename_year = '全' else From 98d3c5f97b1123071e723e70c2573730d97bae27 Mon Sep 17 00:00:00 2001 From: nose221834 Date: Sun, 13 Apr 2025 02:32:48 +0900 Subject: [PATCH 006/285] =?UTF-8?q?feat:=20rubocop=E3=81=AE=E8=A8=AD?= =?UTF-8?q?=E5=AE=9A=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/.rubocop.yml | 252 ++++++++++++++++++++++++++++++++++++++++++ api/.rubocop_todo.yml | 0 2 files changed, 252 insertions(+) create mode 100644 api/.rubocop.yml create mode 100644 api/.rubocop_todo.yml diff --git a/api/.rubocop.yml b/api/.rubocop.yml new file mode 100644 index 000000000..c4f1a0406 --- /dev/null +++ b/api/.rubocop.yml @@ -0,0 +1,252 @@ +inherit_from: .rubocop_todo.yml + +## This configuration was generated by +## `rubocop --auto-gen-config` +## on 2017-11-25 11:44:56 +0000 using RuboCop version 0.51.0. +## The point is for the user to remove these configuration records +## one by one as the offenses are removed from the code base. +## Note that changes in the inspected code, or installation of new +## versions of RuboCop, may require this file to be generated again. + +## Offense count: 15 +## Cop supports --auto-correct. +## Configuration parameters: Include, TreatCommentsAsGroupSeparators. +## Include: **/Gemfile, **/gems.rb +plugins: + - rubocop-rails + - rubocop-performance + - rubocop-rspec + - rubocop-capybara + +AllCops: + TargetRubyVersion: 3.0 + Exclude: + - 'vendor/**/*' + # - 'db/**/*' + - 'lib/tasks/**/*' + - "db/schema.rb" + - 'bin/*' + - 'test/*' + - 'node_modules/**/*' + - 'config/initializers/**/*' + - 'public/**/*' + - 'storage/**/*' + - 'log/**/*' + - 'tmp/**/*' + - 'terraform/**/*' + - 'openapi/**/*' + NewCops: enable + +## sider's rubocop stops during this file +Rails/HttpStatus: + Exclude: + - 'app/controllers/application_controller.rb' + +Rails/SkipsModelValidations: + AllowedMethods: + - 'touch' + - 'upsert_all' + +Layout/LineLength: + Max: 1200 + Exclude: + - 'spec/**/*' + - 'config/**/*' + +Layout/ParameterAlignment: + Enabled: false + +Layout/EmptyLineBetweenDefs: + Enabled: false + +Layout/EmptyLines: + Enabled: false + +Layout/EmptyLinesAroundAccessModifier: + Enabled: false + +Layout/EmptyLinesAroundBlockBody: + Enabled: false + +Layout/EmptyLinesAroundClassBody: + Enabled: false + +Layout/EmptyLinesAroundMethodBody: + Enabled: false + +Layout/ExtraSpacing: + Enabled: false + +Layout/IndentationConsistency: + Enabled: false + +Layout/SpaceBeforeBlockBraces: + Enabled: false + +Layout/SpaceInsideHashLiteralBraces: + Enabled: false + +Layout/EmptyLinesAroundAttributeAccessor: + Enabled: true + +Layout/SpaceAroundMethodCallOperator: + Enabled: true + +Lint/DeprecatedOpenSSLConstant: + Enabled: true + +Lint/DuplicateElsifCondition: + Enabled: true + +Lint/MixedRegexpCaptureTypes: + Enabled: true + +Lint/RaiseException: + Enabled: true + +Lint/StructNewOverride: + Enabled: true + +Style/AsciiComments: + Enabled: false + +Style/ClassAndModuleChildren: + Enabled: false + +Style/Documentation: + Enabled: false + +Style/EmptyMethod: + Enabled: false + +Style/FrozenStringLiteralComment: + Enabled: false + +Style/GuardClause: + Enabled: false + +## Configuration parameters: Whitelist. +## Whitelist: be, be_a, be_an, be_between, be_falsey, be_kind_of, be_instance_of, be_truthy, be_within, eq, eql, end_with, include, match, raise_error, respond_to, start_with +Style/NumericPredicate: + Enabled: false + +## Readability is more important +Style/RedundantReturn: + Enabled: false + +Style/NumericLiterals: + Enabled: false + +Style/AccessorGrouping: + Enabled: false + +Style/ArrayCoercion: + Enabled: true + +Style/BisectedAttrAccessor: + Enabled: true + +Style/CaseLikeIf: + Enabled: true + +Style/ExponentialNotation: + Enabled: true + +Style/HashAsLastArrayItem: + Enabled: false + +Style/HashEachMethods: + Enabled: true + +Style/HashLikeCase: + Enabled: true + +Style/HashTransformKeys: + Enabled: true + +Style/HashTransformValues: + Enabled: true + +Style/RedundantAssignment: + Enabled: true + +Style/RedundantFetchBlock: + Enabled: true + +Style/RedundantFileExtensionInRequire: + Enabled: true + +Style/RedundantRegexpCharacterClass: + Enabled: true + +Style/RedundantRegexpEscape: + Enabled: true + +Style/SlicingWithRange: + Enabled: true + +Style/TrailingCommaInHashLiteral: + Enabled: false + +## Configuration parameters: EnforcedStyle, SupportedStyles. +## SupportedStyles: all_comparison_operators, equality_operators_only +Style/YodaCondition: + # Readability is more important + Enabled: false + +Style/FormatStringToken: + EnforcedStyle: template + +Performance/TimesMap: + Exclude: + - 'spec/**/*' + +Metrics/BlockLength: + Exclude: + - 'spec/**/*' + - 'config/**/*' + - 'app/views/api/v1/**/*' + - 'app/models/order_product.rb' # aasm + +Metrics/AbcSize: + Enabled: false + +Metrics/MethodLength: + Enabled: false + +Style/SymbolArray: + Enabled: false + +Style/RescueModifier: + Enabled: false + +Metrics/ClassLength: + Enabled: false + +Metrics/ParameterLists: + Enabled: false + +RSpec/NestedGroups: + Enabled: false + +RSpec/MultipleMemoizedHelpers: + Enabled: false + +RSpec/ExampleLength: + Enabled: false + +RSpec/ContextWording: + Enabled: false + +RSpec/MultipleExpectations: + Enabled: false + +RSpec/LetSetup: + Enabled: false + + +RSpec/ChangeByZero: + Enabled: false + +Naming/VariableNumber: + Enabled: false \ No newline at end of file diff --git a/api/.rubocop_todo.yml b/api/.rubocop_todo.yml new file mode 100644 index 000000000..e69de29bb From 69ae15fd6385cd7c9efaf202cae270979a9cac5a Mon Sep 17 00:00:00 2001 From: nose221834 Date: Sun, 13 Apr 2025 02:33:02 +0900 Subject: [PATCH 007/285] run: bundle exec rubocop -A --- api/Gemfile | 3 + api/Gemfile.lock | 13 + .../api/auth/sessions_controller.rb | 2 +- .../api/v1/announcements_api_controller.rb | 10 +- .../v1/assign_rental_items_api_controller.rb | 16 +- .../api/v1/employees_api_controller.rb | 14 +- .../api/v1/food_products_api_controller.rb | 76 +- .../api/v1/groups_api_controller.rb | 6 +- .../v1/order_status_check_api_controller.rb | 46 +- .../api/v1/place_orders_api_controller.rb | 16 +- .../api/v1/power_orders_api_controller.rb | 14 +- .../api/v1/public_relations_api_controller.rb | 6 +- .../api/v1/purchase_lists_api_controller.rb | 20 +- .../api/v1/rental_orders_api_controller.rb | 78 +- .../api/v1/representatives_api_controller.rb | 8 +- .../v1/stage_common_options_api_controller.rb | 22 +- .../api/v1/stage_orders_api_controller.rb | 10 +- .../api/v1/stocker_items_api_controller.rb | 6 +- .../controllers/api/v1/users_controller.rb | 4 +- .../api/v1/venue_maps_api_controller.rb | 6 +- api/app/controllers/fes_dates_controller.rb | 8 +- .../group_identification_controller.rb | 20 +- api/app/controllers/groups_controller.rb | 12 +- api/app/controllers/memos_controller.rb | 10 +- api/app/controllers/news_controller.rb | 2 +- .../controllers/place_number_controller.rb | 24 +- api/app/controllers/print_pdf_controller.rb | 18 +- .../controllers/stage_number_controller.rb | 40 +- api/app/models/announcement.rb | 12 +- api/app/models/assign_rental_item.rb | 24 +- api/app/models/cooking_process_order.rb | 18 +- api/app/models/employee.rb | 20 +- api/app/models/food_product.rb | 18 +- api/app/models/group.rb | 944 +++++++++--------- api/app/models/place.rb | 12 +- api/app/models/place_order.rb | 22 +- api/app/models/power_order.rb | 16 +- api/app/models/purchase_list.rb | 40 +- api/app/models/rental_item.rb | 4 +- api/app/models/rental_order.rb | 24 +- api/app/models/stage_common_option.rb | 18 +- api/app/models/stage_order.rb | 42 +- api/app/models/stocker_item.rb | 20 +- api/app/models/sub_rep.rb | 18 +- api/app/models/user.rb | 138 +-- api/app/models/user_detail.rb | 12 +- api/bin/bundle | 4 +- api/config/environments/development.rb | 2 +- api/config/environments/production.rb | 2 +- api/db/schema.rb | 851 ++++++++-------- .../assign_group_places_controller_test.rb | 6 +- .../assign_rental_items_controller_test.rb | 6 +- .../assign_stages_controller_test.rb | 6 +- .../controllers/employees_controller_test.rb | 6 +- .../food_products_controller_test.rb | 6 +- .../controllers/groups_controller_test.rb | 6 +- api/test/controllers/memos_controller_test.rb | 6 +- api/test/controllers/news_controller_test.rb | 6 +- .../place_allow_lists_controller_test.rb | 6 +- .../place_orders_controller_test.rb | 6 +- .../power_orders_controller_test.rb | 6 +- .../public_relations_controller_test.rb | 6 +- .../purchase_lists_controller_test.rb | 6 +- .../rentable_items_controller_test.rb | 6 +- .../rental_orders_controller_test.rb | 6 +- .../stage_common_options_controller_test.rb | 6 +- .../stage_orders_controller_test.rb | 6 +- .../stocker_items_controller_test.rb | 6 +- .../controllers/sub_reps_controller_test.rb | 6 +- .../user_details_controller_test.rb | 6 +- .../user_page_settings_controller_test.rb | 6 +- 71 files changed, 1421 insertions(+), 1476 deletions(-) diff --git a/api/Gemfile b/api/Gemfile index 2f8f47865..bd9ba7e67 100644 --- a/api/Gemfile +++ b/api/Gemfile @@ -59,4 +59,7 @@ end gem 'tzinfo-data', platforms: %i[mingw mswin x64_mingw jruby] gem 'rubocop', require: false +gem 'rubocop-capybara', require: false +gem 'rubocop-performance', require: false gem 'rubocop-rails', require: false +gem 'rubocop-rspec', require: false diff --git a/api/Gemfile.lock b/api/Gemfile.lock index 10f22c75d..d045918e7 100644 --- a/api/Gemfile.lock +++ b/api/Gemfile.lock @@ -223,12 +223,22 @@ GEM rubocop-ast (1.44.0) parser (>= 3.3.7.2) prism (~> 1.4) + rubocop-capybara (2.22.1) + lint_roller (~> 1.1) + rubocop (~> 1.72, >= 1.72.1) + rubocop-performance (1.25.0) + lint_roller (~> 1.1) + rubocop (>= 1.75.0, < 2.0) + rubocop-ast (>= 1.38.0, < 2.0) rubocop-rails (2.31.0) activesupport (>= 4.2.0) lint_roller (~> 1.1) rack (>= 1.1) rubocop (>= 1.75.0, < 2.0) rubocop-ast (>= 1.38.0, < 2.0) + rubocop-rspec (3.5.0) + lint_roller (~> 1.1) + rubocop (~> 1.72, >= 1.72.1) ruby-progressbar (1.13.0) ruby2_keywords (0.0.5) rubyzip (2.4.1) @@ -294,7 +304,10 @@ DEPENDENCIES rack-cors rails (~> 6.1.3.1) rubocop + rubocop-capybara + rubocop-performance rubocop-rails + rubocop-rspec seed-fu slack-notifier slack-ruby-client diff --git a/api/app/controllers/api/auth/sessions_controller.rb b/api/app/controllers/api/auth/sessions_controller.rb index 3406139a2..49ecf34b5 100644 --- a/api/app/controllers/api/auth/sessions_controller.rb +++ b/api/app/controllers/api/auth/sessions_controller.rb @@ -5,7 +5,7 @@ module Api module Auth class SessionsController < ApplicationController def index - puts current_api_user + Rails.logger.debug current_api_user if current_api_user render json: { is_login: true, data: current_api_v1_user } else diff --git a/api/app/controllers/api/v1/announcements_api_controller.rb b/api/app/controllers/api/v1/announcements_api_controller.rb index 9f9122e09..334ae361f 100644 --- a/api/app/controllers/api/v1/announcements_api_controller.rb +++ b/api/app/controllers/api/v1/announcements_api_controller.rb @@ -16,8 +16,8 @@ def get_announcement_show_for_admin_view def fit_announcement_index_for_admin_view(announcements) announcements.map do |announcement| { - "announcement": announcement, - "group": announcement.group + announcement: announcement, + group: announcement.group } end end @@ -31,9 +31,9 @@ def get_announcement_for_admin_view def fit_group_index_for_admin_view(groups) groups.map do |group| { - "group": group, - "group_category": group.group_category, - "fes_year": group.fes_year + group: group, + group_category: group.group_category, + fes_year: group.fes_year } end end diff --git a/api/app/controllers/api/v1/assign_rental_items_api_controller.rb b/api/app/controllers/api/v1/assign_rental_items_api_controller.rb index 1ed681306..3aebb2e87 100644 --- a/api/app/controllers/api/v1/assign_rental_items_api_controller.rb +++ b/api/app/controllers/api/v1/assign_rental_items_api_controller.rb @@ -17,8 +17,8 @@ def get_stocker_item_show_for_admin_view def fit_stocker_item_index_for_admin_view(stocker_items) stocker_items.map do |stocker_item| { - "stocker_item": stocker_item, - "rental_item": stocker_item.rental_item + stocker_item: stocker_item, + rental_item: stocker_item.rental_item } end end @@ -35,12 +35,12 @@ def get_refinement_stocker_item @stocker_place = StockerPlace.find(params[:stocker_place_id]) if @stocker_items.count.zero? - render json: fmt(not_found, { "stocker_place": @stocker_place, "stocker_items": [] }, + render json: fmt(not_found, { stocker_place: @stocker_place, stocker_items: [] }, 'Not found stocker_items') else render json: fmt(ok, - { "stocker_place": @stocker_place, - "stocker_items": fit_stocker_item_index_for_admin_view(@stocker_items) }) + { stocker_place: @stocker_place, + stocker_items: fit_stocker_item_index_for_admin_view(@stocker_items) }) end end @@ -58,9 +58,9 @@ def get_assign_rental_item_show_for_admin_view def fit_assign_rental_item_index_for_admin_view(assign_rental_items) assign_rental_items.map do |assign_rental_item| { - "assign_rental_item": assign_rental_item, - "rental_item": assign_rental_item.rental_item, - "group": assign_rental_item.group + assign_rental_item: assign_rental_item, + rental_item: assign_rental_item.rental_item, + group: assign_rental_item.group } end end diff --git a/api/app/controllers/api/v1/employees_api_controller.rb b/api/app/controllers/api/v1/employees_api_controller.rb index bf4a52642..06ec2ab45 100644 --- a/api/app/controllers/api/v1/employees_api_controller.rb +++ b/api/app/controllers/api/v1/employees_api_controller.rb @@ -16,9 +16,9 @@ def get_employee_show_for_admin_view def fit_employee_index_for_admin_view(employees) employees.map do |employee| { - "employee": employee, - "group": employee.group, - "stool_test": employee.stool_test + employee: employee, + group: employee.group, + stool_test: employee.stool_test } end end @@ -31,9 +31,7 @@ def get_refinement_employees Employee.all # fes_year_id指定 else - Employee.preload(:group).map do |employee| - employee if employee.group.fes_year_id == fes_year_id - end.compact + Employee.preload(:group).select { |employee| employee.group.fes_year_id == fes_year_id } end if @employees.count.zero? @@ -46,9 +44,7 @@ def get_refinement_employees # あいまい検索 def get_search_employees word = params[:word] - @employees = Employee.all.map do |employee| - employee if employee.group.name.include?(word) || employee.name.include?(word) - end.compact + @employees = Employee.all.select { |employee| employee.group.name.include?(word) || employee.name.include?(word) } if @employees.count.zero? render json: fmt(not_found, [], 'Not found employees') else diff --git a/api/app/controllers/api/v1/food_products_api_controller.rb b/api/app/controllers/api/v1/food_products_api_controller.rb index ecf879022..9c041cd3e 100644 --- a/api/app/controllers/api/v1/food_products_api_controller.rb +++ b/api/app/controllers/api/v1/food_products_api_controller.rb @@ -17,8 +17,8 @@ def get_food_product_show_for_admin_view def fit_food_product_index_for_admin_view(food_products) food_products.map do |food_product| { - "food_product": food_product, - "group": food_product.group + food_product: food_product, + group: food_product.group } end end @@ -36,52 +36,34 @@ def get_refinement_food_products # 0: 指定なし(ALL), 1: 食品販売, 2: 物品販売 # word あるかないか # 全部ALL - if fes_year_id.zero? && is_cooking.zero? && category_id.zero? - @food_products = FoodProduct.all - # fes_year_idだけ指定 - elsif fes_year_id != 0 && is_cooking.zero? && category_id.zero? - @food_products = FoodProduct.preload(:group).map do |food_product| - food_product if food_product.group.fes_year_id == fes_year_id - end.compact - # is_cookingだけ指定 - elsif fes_year_id.zero? && is_cooking != 0 && category_id.zero? - @food_products = FoodProduct.where(is_cooking: is_cooking_list[is_cooking]) - # category_idだけ指定 - elsif fes_year_id.zero? && is_cooking.zero? && category_id != 0 - @food_products = FoodProduct.preload(:group).map do |food_product| - food_product if food_product.group.group_category_id == category_id - end.compact - # fes_year_idとis_cookingの指定 - elsif fes_year_id != 0 && is_cooking != 0 && category_id.zero? - @food_products = FoodProduct.where(is_cooking: is_cooking_list[is_cooking]).map do |food_product| - food_product if food_product.group.fes_year_id == fes_year_id - end.compact - # fes_year_idとcategory_idの指定 - elsif fes_year_id != 0 && is_cooking.zero? && category_id != 0 - @food_products = FoodProduct.preload(:group).map do |food_product| - if food_product.group.fes_year_id == fes_year_id && food_product.group.group_category_id == category_id - food_product - end - end.compact - # is_cookingとcategory_idの指定 - elsif fes_year_id.zero? && is_cooking != 0 && category_id != 0 - @food_products = FoodProduct.where(is_cooking: is_cooking_list[is_cooking]).map do |food_product| - food_product if food_product.group.group_category_id == category_id - end.compact - # 全部指定 - else - @food_products = FoodProduct.where(is_cooking: is_cooking_list[is_cooking]).map do |food_product| - if food_product.group.fes_year_id == fes_year_id && food_product.group.group_category_id == category_id - food_product - end - end.compact - end + @food_products = if fes_year_id.zero? && is_cooking.zero? && category_id.zero? + FoodProduct.all + # fes_year_idだけ指定 + elsif fes_year_id != 0 && is_cooking.zero? && category_id.zero? + FoodProduct.preload(:group).select { |food_product| food_product.group.fes_year_id == fes_year_id } + # is_cookingだけ指定 + elsif fes_year_id.zero? && is_cooking != 0 && category_id.zero? + FoodProduct.where(is_cooking: is_cooking_list[is_cooking]) + # category_idだけ指定 + elsif fes_year_id.zero? && is_cooking.zero? && category_id != 0 + FoodProduct.preload(:group).select { |food_product| food_product.group.group_category_id == category_id } + # fes_year_idとis_cookingの指定 + elsif fes_year_id != 0 && is_cooking != 0 && category_id.zero? + FoodProduct.where(is_cooking: is_cooking_list[is_cooking]).select { |food_product| food_product.group.fes_year_id == fes_year_id } + # fes_year_idとcategory_idの指定 + elsif fes_year_id != 0 && is_cooking.zero? && category_id != 0 + FoodProduct.preload(:group).select { |food_product| food_product.group.fes_year_id == fes_year_id && food_product.group.group_category_id == category_id } + # is_cookingとcategory_idの指定 + elsif fes_year_id.zero? && is_cooking != 0 && category_id != 0 + FoodProduct.where(is_cooking: is_cooking_list[is_cooking]).select { |food_product| food_product.group.group_category_id == category_id } + # 全部指定 + else + FoodProduct.where(is_cooking: is_cooking_list[is_cooking]).select { |food_product| food_product.group.fes_year_id == fes_year_id && food_product.group.group_category_id == category_id } + end if search_word.present? # 文字列検索 - @food_products = @food_products.map do |food_product| - food_product if food_product.group.name.include?(search_word) || food_product.name.include?(search_word) - end.compact + @food_products = @food_products.select { |food_product| food_product.group.name.include?(search_word) || food_product.name.include?(search_word) } end if @food_products.count.zero? @@ -94,9 +76,7 @@ def get_refinement_food_products # あいまい検索 def get_search_food_products word = params[:word] - @food_products = FoodProduct.all.map do |food_product| - food_product if food_product.group.name.include?(word) || food_product.name.include?(word) - end.compact + @food_products = FoodProduct.all.select { |food_product| food_product.group.name.include?(word) || food_product.name.include?(word) } if @food_products.count.zero? render json: fmt(not_found, [], 'Not found food_products') else diff --git a/api/app/controllers/api/v1/groups_api_controller.rb b/api/app/controllers/api/v1/groups_api_controller.rb index b61cf64a3..86d9f7500 100644 --- a/api/app/controllers/api/v1/groups_api_controller.rb +++ b/api/app/controllers/api/v1/groups_api_controller.rb @@ -46,9 +46,9 @@ def get_groups_have_no_venue_map def fit_group_index_for_admin_view(groups) groups.map do |group| { - "group": group, - "group_category": group.group_category, - "fes_year": group.fes_year + group: group, + group_category: group.group_category, + fes_year: group.fes_year } end end diff --git a/api/app/controllers/api/v1/order_status_check_api_controller.rb b/api/app/controllers/api/v1/order_status_check_api_controller.rb index 9ba79bdfc..76d726ebd 100644 --- a/api/app/controllers/api/v1/order_status_check_api_controller.rb +++ b/api/app/controllers/api/v1/order_status_check_api_controller.rb @@ -12,29 +12,29 @@ def get_order_status_check_for_admin_view def fit_group_index_for_admin_view(groups) groups.map do |group| { - "group": group, - "user": group.user&.id, - "group_category": group.group_category&.id, - "fes_year": group.fes_year&.id, - "sub_rep": group.sub_rep&.id, - "place_order": group.place_order&.id, - "stage_orders": group.stage_orders.count.zero? ? nil : group.stage_orders[0].id, - "stage_common_option": group.stage_common_option&.id, - "power_orders": group.power_orders.count.zero? ? nil : group.power_orders[0].id, - "rental_orders": group.rental_orders.count.zero? ? nil : group.rental_orders[0].id, - "employees": group.employees.count.zero? ? nil : group.employees[0].id, - "food_product": group.food_products.empty? ? nil : true, - "purchase_list": if group.food_products.empty? - nil - elsif group.food_products.any? do |food_product| - !food_product.purchase_lists.empty? - end - true - end, - "public_relation": group.public_relation&.id, - "venue_map": group.venue_map&.id, - "announcement": group.announcement&.status, - "cooking_process_order": group.cooking_process_order&.id + group: group, + user: group.user&.id, + group_category: group.group_category&.id, + fes_year: group.fes_year&.id, + sub_rep: group.sub_rep&.id, + place_order: group.place_order&.id, + stage_orders: group.stage_orders.count.zero? ? nil : group.stage_orders[0].id, + stage_common_option: group.stage_common_option&.id, + power_orders: group.power_orders.count.zero? ? nil : group.power_orders[0].id, + rental_orders: group.rental_orders.count.zero? ? nil : group.rental_orders[0].id, + employees: group.employees.count.zero? ? nil : group.employees[0].id, + food_product: group.food_products.empty? ? nil : true, + purchase_list: if group.food_products.empty? + nil + elsif group.food_products.any? do |food_product| + !food_product.purchase_lists.empty? + end + true + end, + public_relation: group.public_relation&.id, + venue_map: group.venue_map&.id, + announcement: group.announcement&.status, + cooking_process_order: group.cooking_process_order&.id } end end diff --git a/api/app/controllers/api/v1/place_orders_api_controller.rb b/api/app/controllers/api/v1/place_orders_api_controller.rb index 18c7cd034..f6f3a2bd9 100644 --- a/api/app/controllers/api/v1/place_orders_api_controller.rb +++ b/api/app/controllers/api/v1/place_orders_api_controller.rb @@ -17,9 +17,9 @@ def get_place_order_show_for_admin_view def fit_place_order_index_for_admin_view(place_orders) place_orders.map do |place_order| { - "place_order": place_order, - "place_order_name": place_order.to_place_name_h, - "group": place_order.group + place_order: place_order, + place_order_name: place_order.to_place_name_h, + group: place_order.group } end end @@ -42,9 +42,7 @@ def get_refinement_place_orders end # group_category_id で絞り込み - if group_category_id != 0 - @place_orders = @place_orders.joins(:group).where(groups: { group_category_id: group_category_id }) - end + @place_orders = @place_orders.joins(:group).where(groups: { group_category_id: group_category_id }) if group_category_id != 0 if @place_orders.empty? render json: fmt(not_found, [], 'Not found place_orders') @@ -56,11 +54,7 @@ def get_refinement_place_orders # あいまい検索 def get_search_place_orders word = params[:word] - @place_orders = PlaceOrder.all.map do |place_order| - if place_order.group.name.include?(word) || place_order.to_place_name_h[:first].include?(word) || place_order.to_place_name_h[:second].include?(word) || place_order.to_place_name_h[:third].include?(word) - place_order - end - end.compact + @place_orders = PlaceOrder.all.select { |place_order| place_order.group.name.include?(word) || place_order.to_place_name_h[:first].include?(word) || place_order.to_place_name_h[:second].include?(word) || place_order.to_place_name_h[:third].include?(word) } if @place_orders.count.zero? render json: fmt(not_found, [], 'Not found place_orders') else diff --git a/api/app/controllers/api/v1/power_orders_api_controller.rb b/api/app/controllers/api/v1/power_orders_api_controller.rb index 94abea901..45342539a 100644 --- a/api/app/controllers/api/v1/power_orders_api_controller.rb +++ b/api/app/controllers/api/v1/power_orders_api_controller.rb @@ -17,8 +17,8 @@ def get_power_order_show_for_admin_view def fit_power_order_index_for_admin_view(power_orders) power_orders.map do |power_order| { - "power_order": power_order, - "group": power_order.group + power_order: power_order, + group: power_order.group } end end @@ -32,10 +32,8 @@ def get_refinement_power_orders # fes_year_id, power, category_idで絞り込み @power_orders = PowerOrder.all @power_orders = @power_orders.joins(:group).where(groups: { fes_year_id: fes_year_id }) if fes_year_id != 0 - @power_orders = @power_orders.preload(:group).where('power >= ?', power) if power != 0 - if group_category_id != 0 - @power_orders = @power_orders.joins(:group).where(groups: { group_category_id: group_category_id }) - end + @power_orders = @power_orders.preload(:group).where(power: power..) if power != 0 + @power_orders = @power_orders.joins(:group).where(groups: { group_category_id: group_category_id }) if group_category_id != 0 if @power_orders.count.zero? render json: fmt(not_found, [], 'Not found power_orders') @@ -47,9 +45,7 @@ def get_refinement_power_orders # あいまい検索 def get_search_power_orders word = params[:word] - @power_orders = PowerOrder.all.map do |power_order| - power_order if power_order.group.name.include?(word) || power_order.item.include?(word) - end.compact + @power_orders = PowerOrder.all.select { |power_order| power_order.group.name.include?(word) || power_order.item.include?(word) } if @power_orders.count.zero? render json: fmt(not_found, [], 'Not found power_orders') else diff --git a/api/app/controllers/api/v1/public_relations_api_controller.rb b/api/app/controllers/api/v1/public_relations_api_controller.rb index 9baa484f2..403abe969 100644 --- a/api/app/controllers/api/v1/public_relations_api_controller.rb +++ b/api/app/controllers/api/v1/public_relations_api_controller.rb @@ -12,9 +12,9 @@ def get_public_relation_for_admin_view def fit_group_index_for_admin_view(groups) groups.map do |group| { - "group": group, - "group_category": group.group_category, - "fes_year": group.fes_year + group: group, + group_category: group.group_category, + fes_year: group.fes_year } end end diff --git a/api/app/controllers/api/v1/purchase_lists_api_controller.rb b/api/app/controllers/api/v1/purchase_lists_api_controller.rb index be6d42c91..2837e52ef 100644 --- a/api/app/controllers/api/v1/purchase_lists_api_controller.rb +++ b/api/app/controllers/api/v1/purchase_lists_api_controller.rb @@ -16,9 +16,9 @@ def get_purchase_list_show_for_admin_view def fit_purchase_list_index_for_admin_view(purchase_lists) purchase_lists.map do |purchase_list| { - "purchase_list": purchase_list, - "purchase_list_info": purchase_list.to_info_h, - "group": purchase_list.food_product.group + purchase_list: purchase_list, + purchase_list_info: purchase_list.to_info_h, + group: purchase_list.food_product.group } end end @@ -33,17 +33,13 @@ def get_refinement_purchase_lists PurchaseList.all # fes_year_idだけ指定 elsif fes_year_id != 0 && is_fresh.zero? - PurchaseList.preload(:food_product).map do |purchase_list| - purchase_list if purchase_list.food_product.group.fes_year_id == fes_year_id - end.compact + PurchaseList.preload(:food_product).select { |purchase_list| purchase_list.food_product.group.fes_year_id == fes_year_id } # is_freshだけ指定 elsif fes_year_id.zero? && is_fresh != 0 PurchaseList.where(is_fresh: is_fresh_list[is_fresh]) # 両方指定 else - PurchaseList.where(is_fresh: is_fresh_list[is_fresh]).preload(:food_product).map do |purchase_list| - purchase_list if purchase_list.food_product.group.fes_year_id == fes_year_id - end.compact + PurchaseList.where(is_fresh: is_fresh_list[is_fresh]).preload(:food_product).select { |purchase_list| purchase_list.food_product.group.fes_year_id == fes_year_id } end if @purchase_lists.count.zero? @@ -56,11 +52,7 @@ def get_refinement_purchase_lists # あいまい検索 def get_search_purchase_lists word = params[:word] - @purchase_lists = PurchaseList.preload(:food_product).map do |purchase_list| - if purchase_list.items.include?(word) || purchase_list.food_product.name.include?(word) || purchase_list.food_product.group.name.include?(word) - purchase_list - end - end.compact + @purchase_lists = PurchaseList.preload(:food_product).select { |purchase_list| purchase_list.items.include?(word) || purchase_list.food_product.name.include?(word) || purchase_list.food_product.group.name.include?(word) } if @purchase_lists.count.zero? render json: fmt(not_found, [], 'Not found purchase_lists') else diff --git a/api/app/controllers/api/v1/rental_orders_api_controller.rb b/api/app/controllers/api/v1/rental_orders_api_controller.rb index 1ab2941e3..9b6af11fb 100644 --- a/api/app/controllers/api/v1/rental_orders_api_controller.rb +++ b/api/app/controllers/api/v1/rental_orders_api_controller.rb @@ -16,9 +16,9 @@ def get_rental_order_show_for_admin_view def fit_rental_order_index_for_admin_view(rental_orders) rental_orders.map do |rental_order| { - "rental_order": rental_order, - "rental_item": rental_order.rental_item, - "group": rental_order.group + rental_order: rental_order, + rental_item: rental_order.rental_item, + group: rental_order.group } end end @@ -33,11 +33,9 @@ def get_refinement_rental_orders @rental_orders = @rental_orders.joins(:group).where(groups: { fes_year_id: fes_year_id }) if fes_year_id != 0 - @rental_orders = @rental_orders.where('rental_item_id = ?', rental_item_id) if rental_item_id != 0 + @rental_orders = @rental_orders.where(rental_item_id: rental_item_id) if rental_item_id != 0 - if group_category_id != 0 - @rental_orders = @rental_orders.joins(:group).where(groups: { group_category_id: group_category_id }) - end + @rental_orders = @rental_orders.joins(:group).where(groups: { group_category_id: group_category_id }) if group_category_id != 0 if @rental_orders.count.zero? render json: fmt(not_found, [], 'Not found rental_orders') @@ -49,9 +47,7 @@ def get_refinement_rental_orders # あいまい検索 def get_search_rental_orders word = params[:word] - @rental_orders = RentalOrder.preload(:group).map do |rental_order| - rental_order if rental_order.group.name.include?(word) - end.compact + @rental_orders = RentalOrder.preload(:group).select { |rental_order| rental_order.group.name.include?(word) } if @rental_orders.count.zero? render json: fmt(not_found, [], 'Not found rental_orders') else @@ -74,13 +70,14 @@ def get_rental_orders_with_unassigned_num end output = [] - if !@rental_orders.empty? + if @rental_orders.empty? + render json: fmt(not_found, [], 'Not found stocker_items') + elsif place_id.zero? # place_idが指定なし - if place_id.zero? - @rental_orders.each do |rental_order| - unassigned_num = rental_order.num - AssignRentalItem.where(group_id: rental_order.group_id, - rental_item_id: rental_order.rental_item_id).sum(:num) + @rental_orders.each do |rental_order| + unassigned_num = rental_order.num - AssignRentalItem.where(group_id: rental_order.group_id, + rental_item_id: rental_order.rental_item_id).sum(:num) assign_place = if (place_order = rental_order.group.place_order) if (assign_group_place = place_order.assign_group_place) assign_group_place.place.name @@ -100,40 +97,37 @@ def get_rental_orders_with_unassigned_num unassigned_num: unassigned_num } output << temp - end + end render json: fmt(ok, output) # place_idが指定 - elsif place_id != 0 - @rental_orders.each do |rental_order| - next unless (place_order = rental_order.group.place_order) - - next unless (assign_group_place = place_order.assign_group_place) - - next unless assign_group_place.place_id == place_id - - unassigned_num = rental_order.num - AssignRentalItem.where(group_id: rental_order.group_id, - rental_item_id: rental_order.rental_item_id).sum(:num) - temp = { - id: rental_order.id, - group_name: rental_order.group.name, - assign_place: assign_group_place.place.name, - rental_item: rental_order.rental_item.name, - num: rental_order.num, - unassigned_num: unassigned_num - } - output << temp - end + elsif place_id != 0 + @rental_orders.each do |rental_order| + next unless (place_order = rental_order.group.place_order) + + next unless (assign_group_place = place_order.assign_group_place) + + next unless assign_group_place.place_id == place_id + + unassigned_num = rental_order.num - AssignRentalItem.where(group_id: rental_order.group_id, + rental_item_id: rental_order.rental_item_id).sum(:num) + temp = { + id: rental_order.id, + group_name: rental_order.group.name, + assign_place: assign_group_place.place.name, + rental_item: rental_order.rental_item.name, + num: rental_order.num, + unassigned_num: unassigned_num + } + output << temp + end - if !output.empty? - render json: fmt(ok, output) - else + if output.empty? render json: fmt(not_found, [], 'Not found stocker_items') + else + render json: fmt(ok, output) end - end - else - render json: fmt(not_found, [], 'Not found stocker_items') end end end diff --git a/api/app/controllers/api/v1/representatives_api_controller.rb b/api/app/controllers/api/v1/representatives_api_controller.rb index 926d57610..b865365cd 100644 --- a/api/app/controllers/api/v1/representatives_api_controller.rb +++ b/api/app/controllers/api/v1/representatives_api_controller.rb @@ -19,9 +19,9 @@ class RepresentativesApiController < ApplicationController def fit_representatives_index_for_admin_view(groups) groups.map do |group| { - "user": group.user, - "group": group, - "sub_rep": group.sub_rep.nil? ? @@no_sub_rep : group.sub_rep + user: group.user, + group: group, + sub_rep: group.sub_rep.nil? ? @@no_sub_rep : group.sub_rep } end end @@ -57,7 +57,7 @@ def is_search_condition(group, word) # あいまい検索機能 def get_search_representatives word = params[:word] - @groups = Group.all.map { |group| group if is_search_condition(group, word) }.compact + @groups = Group.all.select { |group| is_search_condition(group, word) } if @groups.count.zero? render json: fmt(not_found, [], 'Not found representatives') else diff --git a/api/app/controllers/api/v1/stage_common_options_api_controller.rb b/api/app/controllers/api/v1/stage_common_options_api_controller.rb index cce3d3fa9..042414148 100644 --- a/api/app/controllers/api/v1/stage_common_options_api_controller.rb +++ b/api/app/controllers/api/v1/stage_common_options_api_controller.rb @@ -17,8 +17,8 @@ def get_stage_common_option_show_for_admin_view def fit_stage_common_option_index_for_admin_view(stage_common_options) stage_common_options.map do |stage_common_option| { - "stage_common_option": stage_common_option, - "group": stage_common_option.group.nil? ? nil : stage_common_option.group + stage_common_option: stage_common_option, + group: stage_common_option.group.nil? ? nil : stage_common_option.group } end end @@ -36,22 +36,14 @@ def get_refinement_stage_common_options @stage_common_options = StageCommonOption.all # own_equipment, bgm, camera_permission, loud_soundで絞り込み - if own_equipment != 0 - @stage_common_options = @stage_common_options.where('(own_equipment = ?)', option_list[own_equipment]) - end + @stage_common_options = @stage_common_options.where('(own_equipment = ?)', option_list[own_equipment]) if own_equipment != 0 @stage_common_options = @stage_common_options.where('(bgm = ?)', option_list[bgm]) if bgm != 0 - if camera_permission != 0 - @stage_common_options = @stage_common_options.where('(camera_permission = ?)', option_list[camera_permission]) - end + @stage_common_options = @stage_common_options.where('(camera_permission = ?)', option_list[camera_permission]) if camera_permission != 0 if loud_sound != 0 @stage_common_options = @stage_common_options.where('(loud_sound = ?)', option_list[loud_sound]) end - if fes_year_id != 0 - @stage_common_options = @stage_common_options.preload(:group).map do |stage_common_option| - stage_common_option if stage_common_option.group.fes_year_id == fes_year_id - end.compact - end + @stage_common_options = @stage_common_options.preload(:group).select { |stage_common_option| stage_common_option.group.fes_year_id == fes_year_id } if fes_year_id != 0 if @stage_common_options.count.zero? render json: fmt(not_found, [], 'Not found stage_common_options') @@ -63,9 +55,7 @@ def get_refinement_stage_common_options # あいまい検索 def get_search_stage_common_options word = params[:word] - @stage_common_options = StageCommonOption.preload(:group).map do |stage_common_option| - stage_common_option if stage_common_option.group.name.include?(word) - end.compact + @stage_common_options = StageCommonOption.preload(:group).select { |stage_common_option| stage_common_option.group.name.include?(word) } if @stage_common_options.count.zero? render json: fmt(not_found, [], 'Not found stage_common_options') else diff --git a/api/app/controllers/api/v1/stage_orders_api_controller.rb b/api/app/controllers/api/v1/stage_orders_api_controller.rb index 70711b6b4..93989b30e 100644 --- a/api/app/controllers/api/v1/stage_orders_api_controller.rb +++ b/api/app/controllers/api/v1/stage_orders_api_controller.rb @@ -16,9 +16,9 @@ def get_stage_order_show_for_admin_view def fit_stage_order_index_for_admin_view(stage_orders) stage_orders.map do |stage_order| { - "stage_order": stage_order, - "stage_order_info": stage_order.to_info_h, - "group": stage_order.group + stage_order: stage_order, + stage_order_info: stage_order.to_info_h, + group: stage_order.group } end end @@ -59,9 +59,7 @@ def get_refinement_stage_orders # あいまい検索 def get_search_stage_orders word = params[:word] - @stage_orders = StageOrder.preload(:group).map do |stage_order| - stage_order if stage_order.group.name.include?(word) - end.compact + @stage_orders = StageOrder.preload(:group).select { |stage_order| stage_order.group.name.include?(word) } if @stage_orders.count.zero? render json: fmt(not_found, [], 'Not found stage_orders') else diff --git a/api/app/controllers/api/v1/stocker_items_api_controller.rb b/api/app/controllers/api/v1/stocker_items_api_controller.rb index 2751279e2..099367639 100644 --- a/api/app/controllers/api/v1/stocker_items_api_controller.rb +++ b/api/app/controllers/api/v1/stocker_items_api_controller.rb @@ -25,7 +25,9 @@ def get_stocker_items_with_remaining_num end output = [] - if !@stocker_items.empty? + if @stocker_items.empty? + render json: fmt(not_found, [], 'Not found stocker_items') + else @stocker_items.each do |stocker_item| remaining_num = stocker_item.num - AssignRentalItem.where(rental_item_id: stocker_item.rental_item_id, stocker_place_id: stocker_item.stocker_place_id).sum(:num) @@ -40,8 +42,6 @@ def get_stocker_items_with_remaining_num output << temp end render json: fmt(ok, output) - else - render json: fmt(not_found, [], 'Not found stocker_items') end end end diff --git a/api/app/controllers/api/v1/users_controller.rb b/api/app/controllers/api/v1/users_controller.rb index c90c70547..4eec0130a 100644 --- a/api/app/controllers/api/v1/users_controller.rb +++ b/api/app/controllers/api/v1/users_controller.rb @@ -30,8 +30,8 @@ def get_representative_show_for_admin_view def fit_user_index_for_admin_view(users) users.map do |user| { - "user": user, - "role": user.role + user: user, + role: user.role } end end diff --git a/api/app/controllers/api/v1/venue_maps_api_controller.rb b/api/app/controllers/api/v1/venue_maps_api_controller.rb index a9fe2c0ec..d39c67fb3 100644 --- a/api/app/controllers/api/v1/venue_maps_api_controller.rb +++ b/api/app/controllers/api/v1/venue_maps_api_controller.rb @@ -12,9 +12,9 @@ def get_venue_map_for_admin_view def fit_group_index_for_admin_view(groups) groups.map do |group| { - "group": group, - "group_category": group.group_category, - "fes_year": group.fes_year + group: group, + group_category: group.group_category, + fes_year: group.fes_year } end end diff --git a/api/app/controllers/fes_dates_controller.rb b/api/app/controllers/fes_dates_controller.rb index 8d45fba0a..98272962e 100644 --- a/api/app/controllers/fes_dates_controller.rb +++ b/api/app/controllers/fes_dates_controller.rb @@ -7,8 +7,8 @@ def index @fes_dates = FesDate.preload(:fes_year) .map do |fes_date| { - "fes_date": fes_date, - "fes_year": fes_date.fes_year + fes_date: fes_date, + fes_year: fes_date.fes_year } end render json: fmt(ok, @fes_dates) @@ -16,8 +16,8 @@ def index def show fes_date = { - "fes_date": @fes_date, - "fes_year": @fes_date.fes_year + fes_date: @fes_date, + fes_year: @fes_date.fes_year } render json: fmt(ok, fes_date) end diff --git a/api/app/controllers/group_identification_controller.rb b/api/app/controllers/group_identification_controller.rb index 982d69965..c4b7db384 100644 --- a/api/app/controllers/group_identification_controller.rb +++ b/api/app/controllers/group_identification_controller.rb @@ -16,16 +16,16 @@ def index @group_identifications = @groups.map do |group| { - "id": group.group_identification&.id, - "group_id": group.id, - "name": group.name, - "group_category_id": group.group_category.id, - "group_category": group.group_category.name, - "number": group.number.nil? ? nil : group.number, - "place": group.place.nil? ? nil : group.place, - "stage": group.stage.nil? ? nil : group.stage, - "created_at": group.group_identification&.created_at, - "updated_at": group.group_identification&.updated_at + id: group.group_identification&.id, + group_id: group.id, + name: group.name, + group_category_id: group.group_category.id, + group_category: group.group_category.name, + number: group.number.nil? ? nil : group.number, + place: group.place.nil? ? nil : group.place, + stage: group.stage.nil? ? nil : group.stage, + created_at: group.group_identification&.created_at, + updated_at: group.group_identification&.updated_at } end diff --git a/api/app/controllers/groups_controller.rb b/api/app/controllers/groups_controller.rb index 24446fca0..b5d5470f1 100644 --- a/api/app/controllers/groups_controller.rb +++ b/api/app/controllers/groups_controller.rb @@ -24,8 +24,8 @@ def create client = Slack::Web::Client.new client.chat_postMessage( - token: ENV['BOT_USER_ACCESS_TOKEN'], - channel: "##{ENV['CHANNEL']}", + token: ENV.fetch('BOT_USER_ACCESS_TOKEN', nil), + channel: "##{ENV.fetch('CHANNEL', nil)}", text: " 参加団体「#{@group.name}」が追加されました @@ -51,8 +51,8 @@ def update client = Slack::Web::Client.new client.chat_postMessage( - token: ENV['BOT_USER_ACCESS_TOKEN'], - channel: "##{ENV['CHANNEL']}", + token: ENV.fetch('BOT_USER_ACCESS_TOKEN', nil), + channel: "##{ENV.fetch('CHANNEL', nil)}", text: " 参加団体「#{@group.name}」が編集されました @@ -78,8 +78,8 @@ def destroy client = Slack::Web::Client.new client.chat_postMessage( - token: ENV['BOT_USER_ACCESS_TOKEN'], - channel: "##{ENV['CHANNEL']}", + token: ENV.fetch('BOT_USER_ACCESS_TOKEN', nil), + channel: "##{ENV.fetch('CHANNEL', nil)}", text: " 参加団体「#{@group.name}」が削除されました diff --git a/api/app/controllers/memos_controller.rb b/api/app/controllers/memos_controller.rb index 3925d6caf..10a1c3634 100644 --- a/api/app/controllers/memos_controller.rb +++ b/api/app/controllers/memos_controller.rb @@ -9,8 +9,8 @@ def index @memos = Memo.preload(:user).order(id: 'DESC').limit(100) .map do |memo| { - "memo": memo, - "user": memo.user + memo: memo, + user: memo.user } end render json: fmt(ok, @memos) @@ -27,8 +27,8 @@ def show def create @new_memo = Memo.create(memo_params) @memo = { - "memo": @new_memo, - "user": @new_memo.user + memo: @new_memo, + user: @new_memo.user } render json: fmt(created, @memo) # render json: @memos @@ -38,7 +38,7 @@ def create # PATCH/PUT /memos/1.json def update @memo.update(memo_params) - @memos = Memo.all.order(id: 'DESC') + @memos = Memo.order(id: 'DESC') memo_list = [] @memos.each do |memo| user = memo.user.name diff --git a/api/app/controllers/news_controller.rb b/api/app/controllers/news_controller.rb index 23f1e47c8..38612b373 100644 --- a/api/app/controllers/news_controller.rb +++ b/api/app/controllers/news_controller.rb @@ -6,7 +6,7 @@ class NewsController < ApplicationController # GET /news # GET /news.json def index - @news = News.all.order(id: 'DESC') + @news = News.order(id: 'DESC') render json: @news end diff --git a/api/app/controllers/place_number_controller.rb b/api/app/controllers/place_number_controller.rb index 7789d23d0..14ff8302b 100644 --- a/api/app/controllers/place_number_controller.rb +++ b/api/app/controllers/place_number_controller.rb @@ -9,19 +9,19 @@ def index @places = Place.all @place_numbers = @places.map do |place| { - "place": place, - "place_numbers": if place.place_numbers.nil? - nil - else - place.place_numbers.map do |place_number| - { - "group_identification_id": place_number.group_identification&.id, - "place_number": place_number.nil? ? nil : place_number, - "num": place_number.group_identification&.number, - "group": place_number.group_identification&.group - } - end + place: place, + place_numbers: if place.place_numbers.nil? + nil + else + place.place_numbers.map do |place_number| + { + group_identification_id: place_number.group_identification&.id, + place_number: place_number.nil? ? nil : place_number, + num: place_number.group_identification&.number, + group: place_number.group_identification&.group + } end + end } end render json: fmt(ok, @place_numbers) diff --git a/api/app/controllers/print_pdf_controller.rb b/api/app/controllers/print_pdf_controller.rb index a48540809..bc97453e7 100644 --- a/api/app/controllers/print_pdf_controller.rb +++ b/api/app/controllers/print_pdf_controller.rb @@ -63,35 +63,35 @@ def output_groups(template_name, style_name, output_file_name, type) print_pdf(template_name, style_name, "#{output_file_name}_#{format('%02d', @group.id)}.#{@group.name}", type) # groupが存在しなければNot FoundのHTMLを出力 else - render file: "#{Rails.root}/app/views/print_pdf/not_found.html", layout: false, content_type: 'text/html' + render file: Rails.root.join('app/views/print_pdf/not_found.html').to_s, layout: false, content_type: 'text/html' end end # 食品販売 def output_groups_in_group_category_1(template_name, style_name, output_file_name, type) - if Group.where(fes_year_id: params[:fes_year_id]).exists? + if Group.exists?(fes_year_id: params[:fes_year_id]) @groups = Group.where(fes_year_id: params[:fes_year_id]).where(group_category_id: 1) - puts @groups + Rails.logger.debug @groups print_pdf(template_name, style_name, output_file_name, type) else - render file: "#{Rails.root}/app/views/print_pdf/not_found.html", layout: false, content_type: 'text/html' + render file: Rails.root.join('app/views/print_pdf/not_found.html').to_s, layout: false, content_type: 'text/html' end end # 保健所提出書類(調理計画・従事者) def output_groups_of_health_office_document(template_name, style_name, output_file_name, type) - if Group.where(fes_year_id: params[:fes_year_id]).exists? + if Group.exists?(fes_year_id: params[:fes_year_id]) @groups = Group.where(fes_year_id: params[:fes_year_id]).where(group_category_id: 1) @fes_dates = FesDate.all print_pdf(template_name, style_name, output_file_name, type) else - render file: "#{Rails.root}/app/views/print_pdf/not_found.html", layout: false, content_type: 'text/html' + render file: Rails.root.join('app/views/print_pdf/not_found.html').to_s, layout: false, content_type: 'text/html' end end # カテゴリ分けされたもの def output_groups_with_categories(template_name, style_name, output_file_name, type) - if Group.where(fes_year_id: params[:fes_year_id]).exists? + if Group.exists?(fes_year_id: params[:fes_year_id]) @groups = Group.where(fes_year_id: params[:fes_year_id]) @catgories = [] (1..6).each do |i| @@ -100,7 +100,7 @@ def output_groups_with_categories(template_name, style_name, output_file_name, t end print_pdf(template_name, style_name, output_file_name, type) else - render file: "#{Rails.root}/app/views/print_pdf/not_found.html", layout: false, content_type: 'text/html' + render file: Rails.root.join('app/views/print_pdf/not_found.html').to_s, layout: false, content_type: 'text/html' end end @@ -121,7 +121,7 @@ def print_pdf(template_name, style_name, output_file_name, type) else PDFKit.new(html, page_size: 'A4', encoding: 'UTF-8') end - pdf.stylesheets << "#{Rails.root}/app/views/print_pdf/#{style_name}.css" + pdf.stylesheets << Rails.root.join("app/views/print_pdf/#{style_name}.css").to_s send_data pdf.to_pdf, filename: "#{output_file_name}.pdf", diff --git a/api/app/controllers/stage_number_controller.rb b/api/app/controllers/stage_number_controller.rb index 1771df1a7..0e45a847e 100644 --- a/api/app/controllers/stage_number_controller.rb +++ b/api/app/controllers/stage_number_controller.rb @@ -9,27 +9,27 @@ def index @stages = Stage.all @stage_numbers = @stages.map do |stage| { - "stage": stage, - "stage_numbers": if stage.stage_numbers.nil? - nil - else - stage.stage_numbers.map do |stage_number| - { - "group_identification_id": stage_number.group_identification&.id, - "stage_number": stage_number, - "num": if stage_number.group_identification.nil? - nil - else - (stage_number.group_identification.group.fes_year_id == params[:fes_year_id].to_i ? stage_number.group_identification.number : nil) - end, - "group": if stage_number.group_identification.nil? - nil - else - (stage_number.group_identification.group.fes_year_id == params[:fes_year_id].to_i ? stage_number.group_identification.group : nil) - end - } - end + stage: stage, + stage_numbers: if stage.stage_numbers.nil? + nil + else + stage.stage_numbers.map do |stage_number| + { + group_identification_id: stage_number.group_identification&.id, + stage_number: stage_number, + num: if stage_number.group_identification.nil? + nil + else + (stage_number.group_identification.group.fes_year_id == params[:fes_year_id].to_i ? stage_number.group_identification.number : nil) + end, + group: if stage_number.group_identification.nil? + nil + else + (stage_number.group_identification.group.fes_year_id == params[:fes_year_id].to_i ? stage_number.group_identification.group : nil) + end + } end + end } end render json: fmt(ok, @stage_numbers) diff --git a/api/app/models/announcement.rb b/api/app/models/announcement.rb index 8f8292238..c69da90c7 100644 --- a/api/app/models/announcement.rb +++ b/api/app/models/announcement.rb @@ -7,8 +7,8 @@ def self.with_groups @record = Announcement.preload(:group) .map do |announcement| { - "announcement": announcement, - "group": announcement.group + announcement: announcement, + group: announcement.group } end end @@ -16,15 +16,15 @@ def self.with_groups def self.with_group(announcement_id) announcement = Announcement.find(announcement_id) { - "announcement": announcement, - "group": announcement.group + announcement: announcement, + group: announcement.group } end def to_info_h { - "id": id, - "group_id": group_id + id: id, + group_id: group_id } end end diff --git a/api/app/models/assign_rental_item.rb b/api/app/models/assign_rental_item.rb index f30bcdff7..dc6b40975 100644 --- a/api/app/models/assign_rental_item.rb +++ b/api/app/models/assign_rental_item.rb @@ -9,9 +9,9 @@ def self.with_groups_and_rental_item @record = AssignRentalItem.preload(:group) .map do |assign_rental_item| { - "assign_rental_item": assign_rental_item, - "rental_item": assign_rental_item.rental_item, - "group": assign_rental_item.group + assign_rental_item: assign_rental_item, + rental_item: assign_rental_item.rental_item, + group: assign_rental_item.group } end end @@ -19,20 +19,20 @@ def self.with_groups_and_rental_item def self.with_rental_item(assign_rental_item_id) assign_rental_item = AssignRentalItem.find(assign_rental_item_id) { - "assign_rental_item": assign_rental_item, - "rental_item": assign_rental_item.rental_item, - "group": assign_rental_item.group + assign_rental_item: assign_rental_item, + rental_item: assign_rental_item.rental_item, + group: assign_rental_item.group } end def to_rental_item_info_h { - "rental_item": nil? ? nil : self, - "name": rental_item.name, - "is_inside_shop_rentable": rental_item.is_inside_shop_rentable, - "is_outside_shop_rentable": rental_item.is_outside_shop_rentable, - "is_stage_rentable": rental_item.is_stage_rentable, - "num": num + rental_item: nil? ? nil : self, + name: rental_item.name, + is_inside_shop_rentable: rental_item.is_inside_shop_rentable, + is_outside_shop_rentable: rental_item.is_outside_shop_rentable, + is_stage_rentable: rental_item.is_stage_rentable, + num: num } end end diff --git a/api/app/models/cooking_process_order.rb b/api/app/models/cooking_process_order.rb index e8f3de25c..a64ce6969 100644 --- a/api/app/models/cooking_process_order.rb +++ b/api/app/models/cooking_process_order.rb @@ -9,8 +9,8 @@ def self.with_groups @records = CookingProcessOrder.preload(:group) .map do |cooking_process_order| { - "cooking_process_order": cooking_process_order, - "group": cooking_process_order.group + cooking_process_order: cooking_process_order, + group: cooking_process_order.group } end end @@ -19,19 +19,19 @@ def self.with_groups def self.with_group(cooking_process_order_id) cooking_process_order = CookingProcessOrder.find(cooking_process_order_id) { - "cooking_process_order": cooking_process_order, - "group": cooking_process_order.group + cooking_process_order: cooking_process_order, + group: cooking_process_order.group } end # インスタンスの情報をハッシュとして返すインスタンスメソッド def to_info_h { - "id": id, - "group_id": group_id, - "pre_open_kitchen": pre_open_kitchen, - "during_open_kitchen": during_open_kitchen, - "tent": tent + id: id, + group_id: group_id, + pre_open_kitchen: pre_open_kitchen, + during_open_kitchen: during_open_kitchen, + tent: tent } end end diff --git a/api/app/models/employee.rb b/api/app/models/employee.rb index a548f718b..003fb296b 100644 --- a/api/app/models/employee.rb +++ b/api/app/models/employee.rb @@ -8,9 +8,9 @@ def self.with_groups @record = Employee.preload(:group) .map do |employee| { - "employee": employee, - "group": employee.group, - "stool_test": employee.stool_test + employee: employee, + group: employee.group, + stool_test: employee.stool_test } end end @@ -18,18 +18,18 @@ def self.with_groups def self.with_group(employee_id) employee = Employee.find(employee_id) { - "employee": employee, - "group": employee.group, - "stool_test": employee.stool_test + employee: employee, + group: employee.group, + stool_test: employee.stool_test } end def to_info_h { - "id": id, - "name": name, - "student_id": student_id, - "stool_test": stool_test.status + id: id, + name: name, + student_id: student_id, + stool_test: stool_test.status } end end diff --git a/api/app/models/food_product.rb b/api/app/models/food_product.rb index 649e1213e..833f27d79 100644 --- a/api/app/models/food_product.rb +++ b/api/app/models/food_product.rb @@ -8,8 +8,8 @@ def self.with_groups @record = FoodProduct.preload(:group) .map do |food_product| { - "food_product": food_product, - "group": food_product.group + food_product: food_product, + group: food_product.group } end end @@ -17,18 +17,18 @@ def self.with_groups def self.with_group(food_product_id) food_product = FoodProduct.find(food_product_id) { - "food_product": food_product, - "group": food_product.group + food_product: food_product, + group: food_product.group } end def to_info_h { - "id": id, - "name": name, - "is_cooking": is_cooking, - "first_day_num": first_day_num, - "second_day_num": second_day_num + id: id, + name: name, + is_cooking: is_cooking, + first_day_num: first_day_num, + second_day_num: second_day_num } end end diff --git a/api/app/models/group.rb b/api/app/models/group.rb index ec26f6ae7..1bffdb369 100644 --- a/api/app/models/group.rb +++ b/api/app/models/group.rb @@ -26,8 +26,8 @@ def self.with_group_categories @records = Group.preload(:group_category) .map do |group| { - "group": group, - "group_category": group.group_category + group: group, + group_category: group.group_category } end end @@ -37,8 +37,8 @@ def self.with_group_category(group_id) @record = Group.eager_load(:group_category).where(groups: { id: group_id }) .map do |group| { - "group": group, - "group_category": group.group_category + group: group, + group_category: group.group_category } end end @@ -50,9 +50,9 @@ def self.with_group_categories_and_fes_years @records = Group.preload(:group_category, :fes_year) .map do |group| { - "group": group, - "group_category": group.group_category, - "fes_year": group.fes_year + group: group, + group_category: group.group_category, + fes_year: group.fes_year } end end @@ -62,67 +62,67 @@ def self.with_order_infos @record = Group.all .map do |group| { - "group": group, - "user": group.user.nil? ? nil : group.user, - "group_category": group.group_category&.name, - "fes_year": group.fes_year&.year_num, - "sub_rep": group.sub_rep&.to_info_h, - "place_order": group.place_order&.to_place_name_h, - "stage_orders": if group.stage_orders.count.zero? - nil - else - group.stage_orders.map do |stage_order| - { - "stage_order": stage_order.to_info_h - } - end - end, - "stage_common_option": group.stage_common_option&.to_info_h, - "power_orders": if group.power_orders.count.zero? - nil - else - group.power_orders.map do |power_order| - { - "power_order": power_order.to_info_h - } - end - end, - "rental_orders": if group.rental_orders.count.zero? - nil - else - group.rental_orders.map do |rental_order| - { - "rental_item": rental_order.to_rental_item_info_h - } - end - end, - "employees": if group.employees.count.zero? - nil - else - group.employees.map do |employee| - { - "employee": employee.to_info_h - } - end - end, - "food_products": if group.food_products.count.zero? - nil - else - group.food_products.map do |food_product| - { - "food_product": food_product.to_info_h, - "purchase_lists": food_product.purchase_lists.map do |purchase_list| - { - "purchase_list": purchase_list.to_info_h - } - end - } - end - end, - "public_relation": group.public_relation&.to_info_h, - "venue_map": group.venue_map&.to_info_h, - "announcement": group.announcement&.to_info_h, - "cooking_process_order": group.cooking_process_order&.to_info_h + group: group, + user: group.user.nil? ? nil : group.user, + group_category: group.group_category&.name, + fes_year: group.fes_year&.year_num, + sub_rep: group.sub_rep&.to_info_h, + place_order: group.place_order&.to_place_name_h, + stage_orders: if group.stage_orders.count.zero? + nil + else + group.stage_orders.map do |stage_order| + { + stage_order: stage_order.to_info_h + } + end + end, + stage_common_option: group.stage_common_option&.to_info_h, + power_orders: if group.power_orders.count.zero? + nil + else + group.power_orders.map do |power_order| + { + power_order: power_order.to_info_h + } + end + end, + rental_orders: if group.rental_orders.count.zero? + nil + else + group.rental_orders.map do |rental_order| + { + rental_item: rental_order.to_rental_item_info_h + } + end + end, + employees: if group.employees.count.zero? + nil + else + group.employees.map do |employee| + { + employee: employee.to_info_h + } + end + end, + food_products: if group.food_products.count.zero? + nil + else + group.food_products.map do |food_product| + { + food_product: food_product.to_info_h, + purchase_lists: food_product.purchase_lists.map do |purchase_list| + { + purchase_list: purchase_list.to_info_h + } + end + } + end + end, + public_relation: group.public_relation&.to_info_h, + venue_map: group.venue_map&.to_info_h, + announcement: group.announcement&.to_info_h, + cooking_process_order: group.cooking_process_order&.to_info_h } end end @@ -132,67 +132,67 @@ def self.with_order_info(group_id) group = Group.find(group_id) @record = { - "group": group, - "user": group.user.nil? ? nil : group.user, - "group_category": group.group_category&.name, - "fes_year": group.fes_year&.year_num, - "sub_rep": group.sub_rep&.to_info_h, - "place_order": group.place_order&.to_place_name_h, - "stage_orders": if group.stage_orders.count.zero? - nil - else - group.stage_orders.map do |stage_order| - { - "stage_order": stage_order.to_info_h - } - end - end, - "stage_common_option": group.stage_common_option&.to_info_h, - "power_orders": if group.power_orders.count.zero? - nil - else - group.power_orders.map do |power_order| - { - "power_order": power_order.to_info_h - } - end - end, - "rental_orders": if group.rental_orders.count.zero? - nil - else - group.rental_orders.map do |rental_order| - { - "rental_item": rental_order.to_rental_item_info_h - } - end - end, - "employees": if group.employees.count.zero? - nil - else - group.employees.map do |employee| - { - "employee": employee.to_info_h - } - end - end, - "food_products": if group.food_products.count.zero? - nil - else - group.food_products.map do |food_product| - { - "food_product": food_product.to_info_h, - "purchase_lists": food_product.purchase_lists.map do |purchase_list| - { - "purchase_list": purchase_list.to_info_h - } - end - } - end - end, - "public_relation": group.public_relation&.to_info_h, - "venue_map": group.venue_map&.to_info_h, - "announcement": group.announcement&.to_info_h, - "cooking_process_order": group.cooking_process_order&.to_info_h + group: group, + user: group.user.nil? ? nil : group.user, + group_category: group.group_category&.name, + fes_year: group.fes_year&.year_num, + sub_rep: group.sub_rep&.to_info_h, + place_order: group.place_order&.to_place_name_h, + stage_orders: if group.stage_orders.count.zero? + nil + else + group.stage_orders.map do |stage_order| + { + stage_order: stage_order.to_info_h + } + end + end, + stage_common_option: group.stage_common_option&.to_info_h, + power_orders: if group.power_orders.count.zero? + nil + else + group.power_orders.map do |power_order| + { + power_order: power_order.to_info_h + } + end + end, + rental_orders: if group.rental_orders.count.zero? + nil + else + group.rental_orders.map do |rental_order| + { + rental_item: rental_order.to_rental_item_info_h + } + end + end, + employees: if group.employees.count.zero? + nil + else + group.employees.map do |employee| + { + employee: employee.to_info_h + } + end + end, + food_products: if group.food_products.count.zero? + nil + else + group.food_products.map do |food_product| + { + food_product: food_product.to_info_h, + purchase_lists: food_product.purchase_lists.map do |purchase_list| + { + purchase_list: purchase_list.to_info_h + } + end + } + end + end, + public_relation: group.public_relation&.to_info_h, + venue_map: group.venue_map&.to_info_h, + announcement: group.announcement&.to_info_h, + cooking_process_order: group.cooking_process_order&.to_info_h } @record end @@ -202,67 +202,67 @@ def self.with_order_info_narrow_down_by_fes_year(fes_year_id) @record = Group.where(groups: { fes_year_id: fes_year_id }) .map do |group| { - "group": group, - "user": group.user.nil? ? nil : group.user, - "group_category": group.group_category&.name, - "fes_year": group.fes_year&.year_num, - "sub_rep": group.sub_rep&.to_info_h, - "place_order": group.place_order&.to_place_name_h, - "stage_orders": if group.stage_orders.count.zero? - nil - else - group.stage_orders.map do |stage_order| - { - "stage_order": stage_order.to_info_h - } - end - end, - "stage_common_option": group.stage_common_option&.to_info_h, - "power_orders": if group.power_orders.count.zero? - nil - else - group.power_orders.map do |power_order| - { - "power_order": power_order.to_info_h - } - end - end, - "rental_orders": if group.rental_orders.count.zero? - nil - else - group.rental_orders.map do |rental_order| - { - "rental_item": rental_order.to_rental_item_info_h - } - end - end, - "employees": if group.employees.count.zero? - nil - else - group.employees.map do |employee| - { - "employee": employee.to_info_h - } - end - end, - "food_products": if group.food_products.count.zero? - nil - else - group.food_products.map do |food_product| - { - "food_product": food_product.to_info_h, - "purchase_lists": food_product.purchase_lists.map do |purchase_list| - { - "purchase_list": purchase_list.to_info_h - } - end - } - end - end, - "public_relation": group.public_relation&.to_info_h, - "venue_map": group.venue_map&.to_info_h, - "announcement": group.announcement&.to_info_h, - "cooking_process_order": group.cooking_process_order&.to_info_h + group: group, + user: group.user.nil? ? nil : group.user, + group_category: group.group_category&.name, + fes_year: group.fes_year&.year_num, + sub_rep: group.sub_rep&.to_info_h, + place_order: group.place_order&.to_place_name_h, + stage_orders: if group.stage_orders.count.zero? + nil + else + group.stage_orders.map do |stage_order| + { + stage_order: stage_order.to_info_h + } + end + end, + stage_common_option: group.stage_common_option&.to_info_h, + power_orders: if group.power_orders.count.zero? + nil + else + group.power_orders.map do |power_order| + { + power_order: power_order.to_info_h + } + end + end, + rental_orders: if group.rental_orders.count.zero? + nil + else + group.rental_orders.map do |rental_order| + { + rental_item: rental_order.to_rental_item_info_h + } + end + end, + employees: if group.employees.count.zero? + nil + else + group.employees.map do |employee| + { + employee: employee.to_info_h + } + end + end, + food_products: if group.food_products.count.zero? + nil + else + group.food_products.map do |food_product| + { + food_product: food_product.to_info_h, + purchase_lists: food_product.purchase_lists.map do |purchase_list| + { + purchase_list: purchase_list.to_info_h + } + end + } + end + end, + public_relation: group.public_relation&.to_info_h, + venue_map: group.venue_map&.to_info_h, + announcement: group.announcement&.to_info_h, + cooking_process_order: group.cooking_process_order&.to_info_h } end end @@ -272,67 +272,67 @@ def self.with_order_info_narrow_down_by_search_word(word) @record = Group.where('name like ?', "%#{word}%") .map do |group| { - "group": group, - "user": group.user.nil? ? nil : group.user, - "group_category": group.group_category&.name, - "fes_year": group.fes_year&.year_num, - "sub_rep": group.sub_rep&.to_info_h, - "place_order": group.place_order&.to_place_name_h, - "stage_orders": if group.stage_orders.count.zero? - nil - else - group.stage_orders.map do |stage_order| - { - "stage_order": stage_order.to_info_h - } - end - end, - "stage_common_option": group.stage_common_option&.to_info_h, - "power_orders": if group.power_orders.count.zero? - nil - else - group.power_orders.map do |power_order| - { - "power_order": power_order.to_info_h - } - end - end, - "rental_orders": if group.rental_orders.count.zero? - nil - else - group.rental_orders.map do |rental_order| - { - "rental_item": rental_order.to_rental_item_info_h - } - end - end, - "employees": if group.employees.count.zero? - nil - else - group.employees.map do |employee| - { - "employee": employee.to_info_h - } - end - end, - "food_products": if group.food_products.count.zero? - nil - else - group.food_products.map do |food_product| - { - "food_product": food_product.to_info_h, - "purchase_lists": food_product.purchase_lists.map do |purchase_list| - { - "purchase_list": purchase_list.to_info_h - } - end - } - end - end, - "public_relation": group.public_relation&.id, - "venue_map": group.venue_map&.id, - "announcement": group.announcement&.id, - "cooking_process_order": group.cooking_process_order&.id + group: group, + user: group.user.nil? ? nil : group.user, + group_category: group.group_category&.name, + fes_year: group.fes_year&.year_num, + sub_rep: group.sub_rep&.to_info_h, + place_order: group.place_order&.to_place_name_h, + stage_orders: if group.stage_orders.count.zero? + nil + else + group.stage_orders.map do |stage_order| + { + stage_order: stage_order.to_info_h + } + end + end, + stage_common_option: group.stage_common_option&.to_info_h, + power_orders: if group.power_orders.count.zero? + nil + else + group.power_orders.map do |power_order| + { + power_order: power_order.to_info_h + } + end + end, + rental_orders: if group.rental_orders.count.zero? + nil + else + group.rental_orders.map do |rental_order| + { + rental_item: rental_order.to_rental_item_info_h + } + end + end, + employees: if group.employees.count.zero? + nil + else + group.employees.map do |employee| + { + employee: employee.to_info_h + } + end + end, + food_products: if group.food_products.count.zero? + nil + else + group.food_products.map do |food_product| + { + food_product: food_product.to_info_h, + purchase_lists: food_product.purchase_lists.map do |purchase_list| + { + purchase_list: purchase_list.to_info_h + } + end + } + end + end, + public_relation: group.public_relation&.id, + venue_map: group.venue_map&.id, + announcement: group.announcement&.id, + cooking_process_order: group.cooking_process_order&.id } end end @@ -342,9 +342,9 @@ def self.with_group_category_and_fes_year(group_id) @record = Group.eager_load(:group_category).where(groups: { id: group_id }) .map do |group| { - "group": group, - "group_category": group.group_category, - "fes_year": group.fes_year + group: group, + group_category: group.group_category, + fes_year: group.fes_year } end end @@ -355,29 +355,29 @@ def self.with_order_status_checks @record = Group.all .map do |group| { - "group": group, - "user": group.user&.id, - "group_category": group.group_category&.id, - "fes_year": group.fes_year&.id, - "sub_rep": group.sub_rep&.id, - "place_order": group.place_order&.id, - "stage_orders": group.stage_orders.count.zero? ? nil : group.stage_orders[0].id, - "stage_common_option": group.stage_common_option&.id, - "power_orders": group.power_orders.count.zero? ? nil : group.power_orders[0].id, - "rental_orders": group.rental_orders.count.zero? ? nil : group.rental_orders[0].id, - "employees": group.employees.count.zero? ? nil : group.employees[0].id, - "food_products": if group.food_products.empty? - nil - else - { - "food_product": group.food_products.first&.id, - "purchase_lists": group.food_products.first.nil? || group.food_products.first.purchase_lists.empty? ? nil : group.food_products.first.purchase_lists[0].id - } - end, - "public_relation": group.public_relation&.id, - "venue_map": group.venue_map&.id, - "announcement": group.announcement&.id, - "cooking_process_order": group.cooking_process_order&.id + group: group, + user: group.user&.id, + group_category: group.group_category&.id, + fes_year: group.fes_year&.id, + sub_rep: group.sub_rep&.id, + place_order: group.place_order&.id, + stage_orders: group.stage_orders.count.zero? ? nil : group.stage_orders[0].id, + stage_common_option: group.stage_common_option&.id, + power_orders: group.power_orders.count.zero? ? nil : group.power_orders[0].id, + rental_orders: group.rental_orders.count.zero? ? nil : group.rental_orders[0].id, + employees: group.employees.count.zero? ? nil : group.employees[0].id, + food_products: if group.food_products.empty? + nil + else + { + food_product: group.food_products.first&.id, + purchase_lists: group.food_products.first.nil? || group.food_products.first.purchase_lists.empty? ? nil : group.food_products.first.purchase_lists[0].id + } + end, + public_relation: group.public_relation&.id, + venue_map: group.venue_map&.id, + announcement: group.announcement&.id, + cooking_process_order: group.cooking_process_order&.id } end end @@ -386,29 +386,29 @@ def self.with_order_status_check(group_id) group = Group.find(group_id) @record = { - "group": group, - "user": group.user&.id, - "group_category": group.group_category&.id, - "fes_year": group.fes_year&.id, - "sub_rep": group.sub_rep&.id, - "place_order": group.place_order&.id, - "stage_orders": group.stage_orders.count.zero? ? nil : group.stage_orders[0].id, - "stage_common_option": group.stage_common_option&.id, - "power_orders": group.power_orders.count.zero? ? nil : group.power_orders[0].id, - "rental_orders": group.rental_orders.count.zero? ? nil : group.rental_orders[0].id, - "employees": group.employees.count.zero? ? nil : group.employees[0].id, - "food_products": if group.food_products.empty? - nil - else - { - "food_product": group.food_products.first&.id, - "purchase_lists": group.food_products.first.nil? || group.food_products.first.purchase_lists.empty? ? nil : group.food_products.first.purchase_lists[0].id - } - end, - "public_relation": group.public_relation&.id, - "venue_map": group.venue_map&.id, - "announcement": group.announcement&.id, - "cooking_process_order": group.cooking_process_order&.id + group: group, + user: group.user&.id, + group_category: group.group_category&.id, + fes_year: group.fes_year&.id, + sub_rep: group.sub_rep&.id, + place_order: group.place_order&.id, + stage_orders: group.stage_orders.count.zero? ? nil : group.stage_orders[0].id, + stage_common_option: group.stage_common_option&.id, + power_orders: group.power_orders.count.zero? ? nil : group.power_orders[0].id, + rental_orders: group.rental_orders.count.zero? ? nil : group.rental_orders[0].id, + employees: group.employees.count.zero? ? nil : group.employees[0].id, + food_products: if group.food_products.empty? + nil + else + { + food_product: group.food_products.first&.id, + purchase_lists: group.food_products.first.nil? || group.food_products.first.purchase_lists.empty? ? nil : group.food_products.first.purchase_lists[0].id + } + end, + public_relation: group.public_relation&.id, + venue_map: group.venue_map&.id, + announcement: group.announcement&.id, + cooking_process_order: group.cooking_process_order&.id } @record end @@ -418,29 +418,29 @@ def self.with_order_status_check_narrow_down_by_fes_year(fes_year_id) @record = Group.where(groups: { fes_year_id: fes_year_id }) .map do |group| { - "group": group, - "user": group.user&.id, - "group_category": group.group_category&.id, - "fes_year": group.fes_year&.id, - "sub_rep": group.sub_rep&.id, - "place_order": group.place_order&.id, - "stage_orders": group.stage_orders.count.zero? ? nil : group.stage_orders[0].id, - "stage_common_option": group.stage_common_option&.id, - "power_orders": group.power_orders.count.zero? ? nil : group.power_orders[0].id, - "rental_orders": group.rental_orders.count.zero? ? nil : group.rental_orders[0].id, - "employees": group.employees.count.zero? ? nil : group.employees[0].id, - "food_products": if group.food_products.empty? - nil - else - { - "food_product": group.food_products.first&.id, - "purchase_lists": group.food_products.first.nil? || group.food_products.first.purchase_lists.empty? ? nil : group.food_products.first.purchase_lists[0].id - } - end, - "public_relation": group.public_relation&.id, - "venue_map": group.venue_map&.id, - "announcement": group.announcement&.id, - "cooking_process_order": group.cooking_process_order&.id + group: group, + user: group.user&.id, + group_category: group.group_category&.id, + fes_year: group.fes_year&.id, + sub_rep: group.sub_rep&.id, + place_order: group.place_order&.id, + stage_orders: group.stage_orders.count.zero? ? nil : group.stage_orders[0].id, + stage_common_option: group.stage_common_option&.id, + power_orders: group.power_orders.count.zero? ? nil : group.power_orders[0].id, + rental_orders: group.rental_orders.count.zero? ? nil : group.rental_orders[0].id, + employees: group.employees.count.zero? ? nil : group.employees[0].id, + food_products: if group.food_products.empty? + nil + else + { + food_product: group.food_products.first&.id, + purchase_lists: group.food_products.first.nil? || group.food_products.first.purchase_lists.empty? ? nil : group.food_products.first.purchase_lists[0].id + } + end, + public_relation: group.public_relation&.id, + venue_map: group.venue_map&.id, + announcement: group.announcement&.id, + cooking_process_order: group.cooking_process_order&.id } end end @@ -450,29 +450,29 @@ def self.with_order_status_check_narrow_down_by_search_word(word) @record = Group.where('name like ?', "%#{word}%") .map do |group| { - "group": group, - "user": group.user&.id, - "group_category": group.group_category&.id, - "fes_year": group.fes_year&.id, - "sub_rep": group.sub_rep&.id, - "place_order": group.place_order&.id, - "stage_orders": group.stage_orders.count.zero? ? nil : group.stage_orders[0].id, - "stage_common_option": group.stage_common_option&.id, - "power_orders": group.power_orders.count.zero? ? nil : group.power_orders[0].id, - "rental_orders": group.rental_orders.count.zero? ? nil : group.rental_orders[0].id, - "employees": group.employees.count.zero? ? nil : group.employees[0].id, - "food_products": if group.food_products.empty? - nil - else - { - "food_product": group.food_products.first&.id, - "purchase_lists": group.food_products.first.nil? || group.food_products.first.purchase_lists.empty? ? nil : group.food_products.first.purchase_lists[0].id - } - end, - "public_relation": group.public_relation&.id, - "venue_map": group.venue_map&.id, - "announcement": group.announcement&.status, - "cooking_process_order": group.cooking_process_order&.id + group: group, + user: group.user&.id, + group_category: group.group_category&.id, + fes_year: group.fes_year&.id, + sub_rep: group.sub_rep&.id, + place_order: group.place_order&.id, + stage_orders: group.stage_orders.count.zero? ? nil : group.stage_orders[0].id, + stage_common_option: group.stage_common_option&.id, + power_orders: group.power_orders.count.zero? ? nil : group.power_orders[0].id, + rental_orders: group.rental_orders.count.zero? ? nil : group.rental_orders[0].id, + employees: group.employees.count.zero? ? nil : group.employees[0].id, + food_products: if group.food_products.empty? + nil + else + { + food_product: group.food_products.first&.id, + purchase_lists: group.food_products.first.nil? || group.food_products.first.purchase_lists.empty? ? nil : group.food_products.first.purchase_lists[0].id + } + end, + public_relation: group.public_relation&.id, + venue_map: group.venue_map&.id, + announcement: group.announcement&.status, + cooking_process_order: group.cooking_process_order&.id } end end @@ -484,9 +484,9 @@ def self.with_sub_reps @records = Group.preload(:sub_rep) .map do |group| { - "group": group, - "sub_rep": group.sub_rep, - "sub_rep_info": group.sub_rep&.to_info_h + group: group, + sub_rep: group.sub_rep, + sub_rep_info: group.sub_rep&.to_info_h } end end @@ -496,9 +496,9 @@ def self.with_sub_rep(group_id) @record = Group.eager_load(:sub_rep).where(groups: { id: group_id }) .map do |group| { - "group": group, - "sub_rep": group.sub_rep, - "sub_rep_info": group.sub_rep&.to_info_h + group: group, + sub_rep: group.sub_rep, + sub_rep_info: group.sub_rep&.to_info_h } end end @@ -510,9 +510,9 @@ def self.with_place_orders @records = Group.preload(:place_order) .map do |group| { - "group": group, - "place_order": group.place_order, - "place_order_name": group.place_order&.to_place_name_h + group: group, + place_order: group.place_order, + place_order_name: group.place_order&.to_place_name_h } end end @@ -523,9 +523,9 @@ def self.with_place_order(group_id) .where(groups: { id: group_id }) .map do |group| { - "group": group, - "place_order": group.place_order, - "place_order_name": group.place_order&.to_place_name_h + group: group, + place_order: group.place_order, + place_order_name: group.place_order&.to_place_name_h } end end @@ -537,17 +537,17 @@ def self.with_stage_orders @records = Group.preload(:stage_orders) .map do |group| { - "group": group, - "stage_orders": if group.stage_orders.count.zero? - nil - else - group.stage_orders.map do |stage_order| - { - "stage_order": stage_order, - "stage_order_info": stage_order&.to_info_h - } - end + group: group, + stage_orders: if group.stage_orders.count.zero? + nil + else + group.stage_orders.map do |stage_order| + { + stage_order: stage_order, + stage_order_info: stage_order&.to_info_h + } end + end } end end @@ -558,17 +558,17 @@ def self.with_stage_order(group_id) .where(groups: { id: group_id }) .map do |group| { - "group": group, - "stage_orders": if group.stage_orders.count.zero? - nil - else - group.stage_orders.map do |stage_order| - { - "stage_order": stage_order, - "stage_order_info": stage_order&.to_info_h - } - end + group: group, + stage_orders: if group.stage_orders.count.zero? + nil + else + group.stage_orders.map do |stage_order| + { + stage_order: stage_order, + stage_order_info: stage_order&.to_info_h + } end + end } end end @@ -580,8 +580,8 @@ def self.with_stage_common_options @records = Group.preload(:stage_common_option) .map do |group| { - "group": group, - "stage_common_option": group.stage_common_option + group: group, + stage_common_option: group.stage_common_option } end end @@ -592,8 +592,8 @@ def self.with_stage_common_option(group_id) .where(groups: { id: group_id }) .map do |group| { - "group": group, - "stage_common_option": group.stage_common_option + group: group, + stage_common_option: group.stage_common_option } end end @@ -605,8 +605,8 @@ def self.with_power_orders @records = Group.preload(:power_orders) .map do |group| { - "group": group, - "power_orders": group.power_orders.count.zero? ? nil : group.power_orders + group: group, + power_orders: group.power_orders.count.zero? ? nil : group.power_orders } end end @@ -617,8 +617,8 @@ def self.with_power_order(group_id) .where(groups: { id: group_id }) .map do |group| { - "group": group, - "power_orders": group.power_orders.count.zero? ? nil : group.power_orders + group: group, + power_orders: group.power_orders.count.zero? ? nil : group.power_orders } end end @@ -630,17 +630,17 @@ def self.with_rental_orders @records = Group.preload(:rental_orders) .map do |group| { - "group": group, - "rental_orders": if group.rental_orders.count.zero? - nil - else - group.rental_orders.map do |rental_order| - { - "rental_order": rental_order, - "rental_item_name": rental_order.rental_item.name - } - end + group: group, + rental_orders: if group.rental_orders.count.zero? + nil + else + group.rental_orders.map do |rental_order| + { + rental_order: rental_order, + rental_item_name: rental_order.rental_item.name + } end + end } end end @@ -651,17 +651,17 @@ def self.with_rental_order(group_id) .where(groups: { id: group_id }) .map do |group| { - "group": group, - "rental_orders": if group.rental_orders.count.zero? - nil - else - group.rental_orders.map do |rental_order| - { - "rental_order": rental_order, - "rental_item_name": rental_order.rental_item.name - } - end + group: group, + rental_orders: if group.rental_orders.count.zero? + nil + else + group.rental_orders.map do |rental_order| + { + rental_order: rental_order, + rental_item_name: rental_order.rental_item.name + } end + end } end end @@ -673,8 +673,8 @@ def self.with_employees @records = Group.preload(:employees) .map do |group| { - "group": group, - "employees": group.employees.count.zero? ? nil : group.employees + group: group, + employees: group.employees.count.zero? ? nil : group.employees } end end @@ -685,8 +685,8 @@ def self.with_employee(group_id) .where(groups: { id: group_id }) .map do |group| { - "group": group, - "employees": group.employees.count.zero? ? nil : group.employees + group: group, + employees: group.employees.count.zero? ? nil : group.employees } end end @@ -698,8 +698,8 @@ def self.with_food_products @records = Group.preload(:food_products) .map do |group| { - "group": group, - "food_products": group.food_products.count.zero? ? nil : group.food_products + group: group, + food_products: group.food_products.count.zero? ? nil : group.food_products } end end @@ -710,8 +710,8 @@ def self.with_food_product(group_id) .where(groups: { id: group_id }) .map do |group| { - "group": group, - "food_products": group.food_products.count.zero? ? nil : group.food_products + group: group, + food_products: group.food_products.count.zero? ? nil : group.food_products } end end @@ -723,12 +723,12 @@ def self.with_public_relations @records = Group.preload(:public_relation) .map do |group| { - "group": group, - "picture_name": group.public_relation&.picture_name, - "picture_path": group.public_relation&.picture_path, - "blurb": group.public_relation&.blurb, - "created_at": group.public_relation&.created_at, - "updated_at": group.public_relation&.updated_at + group: group, + picture_name: group.public_relation&.picture_name, + picture_path: group.public_relation&.picture_path, + blurb: group.public_relation&.blurb, + created_at: group.public_relation&.created_at, + updated_at: group.public_relation&.updated_at } end end @@ -738,22 +738,20 @@ def self.with_public_relation(group_id) @record = Group.eager_load(:public_relation).where(groups: { id: group_id }) .map do |group| { - "group": group, - "public_relation_id": group.public_relation&.id, - "picture_name": group.public_relation&.picture_name, - "picture_path": group.public_relation&.picture_path, - "blurb": group.public_relation&.blurb, - "created_at": group.public_relation&.created_at, - "updated_at": group.public_relation&.updated_at + group: group, + public_relation_id: group.public_relation&.id, + picture_name: group.public_relation&.picture_name, + picture_path: group.public_relation&.picture_path, + blurb: group.public_relation&.blurb, + created_at: group.public_relation&.created_at, + updated_at: group.public_relation&.updated_at } end end # public_relationが存在しないgroupのみ取得する def self.have_no_public_relation(fes_year_id) - @records = Group.eager_load(:public_relation).where(groups: { fes_year_id: fes_year_id }).filter_map do |group| - group if group.public_relation.nil? - end + @records = Group.eager_load(:public_relation).where(groups: { fes_year_id: fes_year_id }).select { |group| group.public_relation.nil? } end # 指定したfes_yearに対応するgroupとそのpublic_relationを取得する @@ -761,12 +759,12 @@ def self.with_public_relation_narrow_down_by_fes_year(fes_year_id) @record = Group.eager_load(:public_relation).where(groups: { fes_year_id: fes_year_id }) .map do |group| { - "group": group, - "picture_name": group.public_relation&.picture_name, - "picture_path": group.public_relation&.picture_path, - "blurb": group.public_relation&.blurb, - "created_at": group.public_relation&.created_at, - "updated_at": group.public_relation&.updated_at + group: group, + picture_name: group.public_relation&.picture_name, + picture_path: group.public_relation&.picture_path, + blurb: group.public_relation&.blurb, + created_at: group.public_relation&.created_at, + updated_at: group.public_relation&.updated_at } end end @@ -776,12 +774,12 @@ def self.with_public_relation_narrow_down_by_search_word(word) @record = Group.eager_load(:public_relation).where('name like ?', "%#{word}%") .map do |group| { - "group": group, - "picture_name": group.public_relation&.picture_name, - "picture_path": group.public_relation&.picture_path, - "blurb": group.public_relation&.blurb, - "created_at": group.public_relation&.created_at, - "updated_at": group.public_relation&.updated_at + group: group, + picture_name: group.public_relation&.picture_name, + picture_path: group.public_relation&.picture_path, + blurb: group.public_relation&.blurb, + created_at: group.public_relation&.created_at, + updated_at: group.public_relation&.updated_at } end end @@ -793,8 +791,8 @@ def self.with_announcements @records = Group.preload(:announcement) .map do |group| { - "group": group, - "announcement": group.announcement + group: group, + announcement: group.announcement } end end @@ -804,17 +802,15 @@ def self.with_announcement(group_id) @record = Group.eager_load(:announcement).where(groups: { id: group_id }) .map do |group| { - "group": group, - "announcement": group.announcement + group: group, + announcement: group.announcement } end end # announcementが存在しないgroupのみ取得する def self.have_no_announcement(fes_year_id) - @records = Group.eager_load(:announcement).where(groups: { fes_year_id: fes_year_id }).filter_map do |group| - group if group.announcement.nil? - end + @records = Group.eager_load(:announcement).where(groups: { fes_year_id: fes_year_id }).select { |group| group.announcement.nil? } end # 指定したfes_yearに対応するgroupとそのannouncementを取得する @@ -822,8 +818,8 @@ def self.with_announcement_narrow_down_by_fes_year(fes_year_id) @record = Group.eager_load(:announcement).where(groups: { fes_year_id: fes_year_id }) .map do |group| { - "group": group, - "announcement": group.announcement + group: group, + announcement: group.announcement } end end @@ -833,8 +829,8 @@ def self.with_announcement_narrow_down_by_search_word(word) @record = Group.eager_load(:announcement).where('name like ?', "%#{word}%") .map do |group| { - "group": group, - "announcement": group.announcement + group: group, + announcement: group.announcement } end end @@ -846,8 +842,8 @@ def self.with_venue_maps @records = Group.preload(:venue_map) .map do |group| { - "group": group, - "venue_map": group.venue_map + group: group, + venue_map: group.venue_map } end end @@ -857,17 +853,15 @@ def self.with_venue_map(group_id) @record = Group.eager_load(:venue_map).where(groups: { id: group_id }) .map do |group| { - "group": group, - "venue_map": group.venue_map + group: group, + venue_map: group.venue_map } end end # venue_mapが存在しないgroupのみ取得する def self.have_no_venue_map(fes_year_id) - @records = Group.eager_load(:venue_map).where(groups: { fes_year_id: fes_year_id }).filter_map do |group| - group if group.venue_map.nil? - end + @records = Group.eager_load(:venue_map).where(groups: { fes_year_id: fes_year_id }).select { |group| group.venue_map.nil? } end # 指定したfes_yearに対応するgroupとそのvenue_mapを取得する @@ -875,8 +869,8 @@ def self.with_venue_map_narrow_down_by_fes_year(fes_year_id) @record = Group.eager_load(:venue_map).where(groups: { fes_year_id: fes_year_id }) .map do |group| { - "group": group, - "venue_map": group.venue_map + group: group, + venue_map: group.venue_map } end end @@ -886,8 +880,8 @@ def self.with_venue_map_narrow_down_by_search_word(word) @record = Group.eager_load(:venue_map).where('name like ?', "%#{word}%") .map do |group| { - "group": group, - "venue_map": group.venue_map + group: group, + venue_map: group.venue_map } end end @@ -897,8 +891,8 @@ def self.with_cooking_process_orders @record = Group.eager_load(:cooking_process_order) .map do |group| { - "group": group, - "cooking_process_order": group.cooking_process_order + group: group, + cooking_process_order: group.cooking_process_order } end end @@ -908,8 +902,8 @@ def self.with_cooking_process_order(group_id) @record = Group.eager_load(:cooking_process_order).where(id: group_id) .map do |group| { - "group": group, - "cooking_process_order": group.cooking_process_order + group: group, + cooking_process_order: group.cooking_process_order } end end @@ -918,7 +912,7 @@ def self.with_cooking_process_order(group_id) def self.have_no_cooking_process_order(fes_year_id) Group.eager_load(:cooking_process_order) .where(fes_year_id: fes_year_id) - .filter_map { |group| group if group.cooking_process_order.nil? } + .select { |group| group.cooking_process_order.nil? } end # 指定したfes_yearに対応するgroupとそのcooking_process_orderを取得する @@ -927,8 +921,8 @@ def self.with_cooking_process_order_narrow_down_by_fes_year(fes_year_id) .where(fes_year_id: fes_year_id) .map do |group| { - "group": group, - "cooking_process_order": group.cooking_process_order + group: group, + cooking_process_order: group.cooking_process_order } end end @@ -939,8 +933,8 @@ def self.with_cooking_process_order_narrow_down_by_search_word(word) .where('name LIKE ?', "%#{word}%") .map do |group| { - "group": group, - "cooking_process_order": group.cooking_process_order + group: group, + cooking_process_order: group.cooking_process_order } end end @@ -987,8 +981,8 @@ def count_purchase_lists def unallocated_rental_items rental_orders.preload(:rental_item).map do |rental_order| { - "item": rental_order.rental_item.name, - "num": rental_order.num - assign_rental_items.map(&:num).sum + item: rental_order.rental_item.name, + num: rental_order.num - assign_rental_items.sum(&:num) } end end diff --git a/api/app/models/place.rb b/api/app/models/place.rb index eeadd66c1..9411fb71e 100644 --- a/api/app/models/place.rb +++ b/api/app/models/place.rb @@ -11,19 +11,17 @@ def to_name # その会場の(開催年で絞り込んだ)参加団体(開催年で絞り込んだ)を取得する def groups(fes_year_id) - place_numbers.preload(:group_identification).map do |place_number| + place_numbers.preload(:group_identification).filter_map do |place_number| place_number.group_identification.group if place_number.group_identification.group.fes_year_id == fes_year_id - end.compact + end end # その会場で申請されている電力の総和を計算する def sum_power_orders(fes_year_id) sum_power_orders_by_place = 0 - sum_power_orders_by_place += place_numbers.preload(:group_identification).map do |place_number| - if place_number.group_identification.group.fes_year_id == fes_year_id - place_number.group_identification.group.sum_power_orders - end - end.compact.sum + sum_power_orders_by_place += place_numbers.preload(:group_identification).filter_map do |place_number| + place_number.group_identification.group.sum_power_orders if place_number.group_identification.group.fes_year_id == fes_year_id + end.sum sum_power_orders_by_place end end diff --git a/api/app/models/place_order.rb b/api/app/models/place_order.rb index 647c2fbee..7c4d08f5c 100644 --- a/api/app/models/place_order.rb +++ b/api/app/models/place_order.rb @@ -8,9 +8,9 @@ def self.get_with_groups @record = PlaceOrder.preload(:group) .map do |place_order| { - "place_order": place_order, - "place_order_name": place_order.to_place_name_h, - "group": place_order.group + place_order: place_order, + place_order_name: place_order.to_place_name_h, + group: place_order.group } end end @@ -18,20 +18,20 @@ def self.get_with_groups def self.get_with_group(place_order_id) place_order = PlaceOrder.find(place_order_id) { - "place_order": place_order, - "place_order_name": place_order.to_place_name_h, - "group": place_order.group + place_order: place_order, + place_order_name: place_order.to_place_name_h, + group: place_order.group } end # 会場申請を会場名のハッシュにして返す def to_place_name_h { - "place_order": nil? ? nil : self, - "first": first.nil? ? nil : _place_name(first), - "second": second.nil? ? nil : _place_name(second), - "third": third.nil? ? nil : _place_name(third), - "remark": remark.nil? ? nil : remark + place_order: nil? ? nil : self, + first: first.nil? ? nil : _place_name(first), + second: second.nil? ? nil : _place_name(second), + third: third.nil? ? nil : _place_name(third), + remark: remark.nil? ? nil : remark } end diff --git a/api/app/models/power_order.rb b/api/app/models/power_order.rb index 77292caef..845a8d982 100644 --- a/api/app/models/power_order.rb +++ b/api/app/models/power_order.rb @@ -7,8 +7,8 @@ def self.with_groups @record = PowerOrder.preload(:group) .map do |power_order| { - "power_order": power_order, - "group": power_order.group + power_order: power_order, + group: power_order.group } end end @@ -23,12 +23,12 @@ def self.with_group_and_place_order(power_order_id) def to_info_h { - "id": id, - "item": item, - "power": power, - "manufacturer": manufacturer, - "model": model, - "item_url": item_url + id: id, + item: item, + power: power, + manufacturer: manufacturer, + model: model, + item_url: item_url } end end diff --git a/api/app/models/purchase_list.rb b/api/app/models/purchase_list.rb index 5d5a7f2fa..66251220d 100644 --- a/api/app/models/purchase_list.rb +++ b/api/app/models/purchase_list.rb @@ -9,9 +9,9 @@ def self.with_groups_and_info @record = PurchaseList.preload(:food_product) .map do |purchase_list| { - "purchase_list": purchase_list, - "purchase_list_info": purchase_list.to_info_h, - "group": purchase_list.food_product.group + purchase_list: purchase_list, + purchase_list_info: purchase_list.to_info_h, + group: purchase_list.food_product.group } end end @@ -19,28 +19,28 @@ def self.with_groups_and_info def self.with_group_and_info(purchase_list_id) purchase_list = PurchaseList.find(purchase_list_id) { - "purchase_list": purchase_list, - "purchase_list_info": purchase_list.to_info_h, - "group": purchase_list.food_product.group + purchase_list: purchase_list, + purchase_list_info: purchase_list.to_info_h, + group: purchase_list.food_product.group } end def to_info_h { - "id": id, - "items": items, - "is_fresh": is_fresh, - "food_product": food_product.name, - "food_product_id": food_product.id, - "shop": shop.name, - "shop_id": shop.id, - "days_num": fes_date.days_num, - "date": fes_date.date, - "date_id": fes_date.id, - "day": fes_date.day, - "year": fes_date.fes_year.year_num, - "purchase_date": purchase_date, - "url": url + id: id, + items: items, + is_fresh: is_fresh, + food_product: food_product.name, + food_product_id: food_product.id, + shop: shop.name, + shop_id: shop.id, + days_num: fes_date.days_num, + date: fes_date.date, + date_id: fes_date.id, + day: fes_date.day, + year: fes_date.fes_year.year_num, + purchase_date: purchase_date, + url: url } end end diff --git a/api/app/models/rental_item.rb b/api/app/models/rental_item.rb index 69cef45c6..c82e8c69c 100644 --- a/api/app/models/rental_item.rb +++ b/api/app/models/rental_item.rb @@ -8,8 +8,8 @@ class RentalItem < ApplicationRecord def to_info_h { - "name": name, - "is_rentable": is_rentable + name: name, + is_rentable: is_rentable } end end diff --git a/api/app/models/rental_order.rb b/api/app/models/rental_order.rb index e0e426788..c9020e128 100644 --- a/api/app/models/rental_order.rb +++ b/api/app/models/rental_order.rb @@ -8,9 +8,9 @@ def self.with_groups_and_rental_item @record = RentalOrder.preload(:group) .map do |rental_order| { - "rental_order": rental_order, - "rental_item": rental_order.rental_item, - "group": rental_order.group + rental_order: rental_order, + rental_item: rental_order.rental_item, + group: rental_order.group } end end @@ -18,20 +18,20 @@ def self.with_groups_and_rental_item def self.with_rental_item(rental_order_id) rental_order = RentalOrder.find(rental_order_id) { - "rental_order": rental_order, - "rental_item": rental_order.rental_item, - "group": rental_order.group + rental_order: rental_order, + rental_item: rental_order.rental_item, + group: rental_order.group } end def to_rental_item_info_h { - "rental_item": nil? ? nil : self, - "name": rental_item.name, - "is_inside_shop_rentable": rental_item.is_inside_shop_rentable, - "is_outside_shop_rentable": rental_item.is_outside_shop_rentable, - "is_stage_rentable": rental_item.is_stage_rentable, - "num": num + rental_item: nil? ? nil : self, + name: rental_item.name, + is_inside_shop_rentable: rental_item.is_inside_shop_rentable, + is_outside_shop_rentable: rental_item.is_outside_shop_rentable, + is_stage_rentable: rental_item.is_stage_rentable, + num: num } end end diff --git a/api/app/models/stage_common_option.rb b/api/app/models/stage_common_option.rb index 4dba553f2..c2c6c52a0 100644 --- a/api/app/models/stage_common_option.rb +++ b/api/app/models/stage_common_option.rb @@ -7,8 +7,8 @@ def self.with_groups @record = StageCommonOption.preload(:group) .map do |stage_common_option| { - "stage_common_option": stage_common_option, - "group": stage_common_option.group + stage_common_option: stage_common_option, + group: stage_common_option.group } end end @@ -16,18 +16,18 @@ def self.with_groups def self.with_group(stage_common_option_id) stage_common_option = StageCommonOption.find(stage_common_option_id) { - "stage_common_option": stage_common_option, - "group": stage_common_option.group + stage_common_option: stage_common_option, + group: stage_common_option.group } end def to_info_h { - "id": id, - "own_equipment": own_equipment, - "bgm": bgm, - "camera_permission": camera_permission, - "loud_sound": loud_sound + id: id, + own_equipment: own_equipment, + bgm: bgm, + camera_permission: camera_permission, + loud_sound: loud_sound } end end diff --git a/api/app/models/stage_order.rb b/api/app/models/stage_order.rb index ae6f09f2c..97772d43c 100644 --- a/api/app/models/stage_order.rb +++ b/api/app/models/stage_order.rb @@ -9,9 +9,9 @@ def self.with_groups @record = StageOrder.preload(:group) .map do |stage_order| { - "stage_order": stage_order, - "stage_order_info": stage_order.to_info_h, - "group": stage_order.group + stage_order: stage_order, + stage_order_info: stage_order.to_info_h, + group: stage_order.group } end end @@ -19,29 +19,29 @@ def self.with_groups def self.with_group(stage_order_id) stage_order = StageOrder.find(stage_order_id) { - "stage_order": stage_order, - "stage_order_info": stage_order.to_info_h, - "group": stage_order.group + stage_order: stage_order, + stage_order_info: stage_order.to_info_h, + group: stage_order.group } end def to_info_h { - "stage_order": nil? ? nil : self, - "is_sunny": is_sunny.nil?, - "year": fes_date.fes_year.year_num, - "date": fes_date.date, - "day": fes_date.day, - "day_num": fes_date.days_num, - "stage_first": stage_first.nil? ? nil : _stage_name(stage_first), - "stage_second": stage_second.nil? ? nil : _stage_name(stage_second), - "use_time_interval": use_time_interval, - "prepare_time_interval": prepare_time_interval, - "cleanup_time_interval": cleanup_time_interval, - "prepare_start_time": prepare_start_time, - "performance_start_time": performance_start_time, - "performance_end_time": performance_end_time, - "cleanup_end_time": cleanup_end_time + stage_order: nil? ? nil : self, + is_sunny: is_sunny.nil?, + year: fes_date.fes_year.year_num, + date: fes_date.date, + day: fes_date.day, + day_num: fes_date.days_num, + stage_first: stage_first.nil? ? nil : _stage_name(stage_first), + stage_second: stage_second.nil? ? nil : _stage_name(stage_second), + use_time_interval: use_time_interval, + prepare_time_interval: prepare_time_interval, + cleanup_time_interval: cleanup_time_interval, + prepare_start_time: prepare_start_time, + performance_start_time: performance_start_time, + performance_end_time: performance_end_time, + cleanup_end_time: cleanup_end_time } end diff --git a/api/app/models/stocker_item.rb b/api/app/models/stocker_item.rb index 9f11654b4..12cbaa80f 100644 --- a/api/app/models/stocker_item.rb +++ b/api/app/models/stocker_item.rb @@ -10,8 +10,8 @@ def self.with_rental_items @record = StockerItem.preload(:rental_item) .map do |stocker_item| { - "stocker_item": stocker_item, - "rental_item": stocker_item.rental_item + stocker_item: stocker_item, + rental_item: stocker_item.rental_item } end end @@ -19,19 +19,19 @@ def self.with_rental_items def self.with_rental_item(stocker_item_id) stocker_item = StockerItem.find(stocker_item_id) { - "stocker_item": stocker_item, - "rental_item": stocker_item.rental_item + stocker_item: stocker_item, + rental_item: stocker_item.rental_item } end def to_rental_item_info_h { - "rental_item": nil? ? nil : self, - "name": rental_item.name, - "is_inside_shop_rentable": rental_item.is_inside_shop_rentable, - "is_outside_shop_rentable": rental_item.is_outside_shop_rentable, - "is_stage_rentable": rental_item.is_stage_rentable, - "num": num + rental_item: nil? ? nil : self, + name: rental_item.name, + is_inside_shop_rentable: rental_item.is_inside_shop_rentable, + is_outside_shop_rentable: rental_item.is_outside_shop_rentable, + is_stage_rentable: rental_item.is_stage_rentable, + num: num } end end diff --git a/api/app/models/sub_rep.rb b/api/app/models/sub_rep.rb index 3e5e9fef7..99d9cbdbd 100644 --- a/api/app/models/sub_rep.rb +++ b/api/app/models/sub_rep.rb @@ -8,15 +8,15 @@ class SubRep < ApplicationRecord # 副代表の情報の日本語をハッシュにして返す def to_info_h { - "id": id, - "name": name, - "department": department.name, - "department_id": department.id, - "grade": grade.name, - "grade_id": grade.id, - "tel": tel, - "email": email, - "student_id": student_id + id: id, + name: name, + department: department.name, + department_id: department.id, + grade: grade.name, + grade_id: grade.id, + tel: tel, + email: email, + student_id: student_id } end end diff --git a/api/app/models/user.rb b/api/app/models/user.rb index e89b03b3f..be889f3a1 100644 --- a/api/app/models/user.rb +++ b/api/app/models/user.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -class User < ActiveRecord::Base +class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :registerable, @@ -28,9 +28,9 @@ def self.with_sub_reps @record = Group.preload(:user, :sub_rep) .map do |group| { - "user": group.user, - "group": group, - "sub_rep": group.sub_rep.nil? ? @@no_sub_rep : group.sub_rep + user: group.user, + group: group, + sub_rep: group.sub_rep.nil? ? @@no_sub_rep : group.sub_rep } end end @@ -38,9 +38,9 @@ def self.with_sub_reps def self.with_sub_rep(group_id) group = Group.find(group_id) { - "user": group.user, - "group": group, - "sub_rep": group.sub_rep.nil? ? @@no_sub_rep : group.sub_rep + user: group.user, + group: group, + sub_rep: group.sub_rep.nil? ? @@no_sub_rep : group.sub_rep } end @@ -51,8 +51,8 @@ def self.with_user_details @records = User.preload(:role) .map do |user| { - "user": user, - "role": user.role + user: user, + role: user.role # "user_detail": user.user_detail, # "user_detail_info": user.user_detail.nil? ? nil : user.user_detail.to_info_h } @@ -63,17 +63,17 @@ def self.with_user_details def self.with_user_detail(user_id) user = User.find(user_id) { - "user": user, - "role": user.role, - "user_detail": user.user_detail, - "user_detail_info": user.user_detail&.to_info_h + user: user, + role: user.role, + user_detail: user.user_detail, + user_detail_info: user.user_detail&.to_info_h } end def with_user_detail { - "user": self, - "user_detail": user_detail&.to_info_h + user: self, + user_detail: user_detail&.to_info_h } end @@ -82,61 +82,61 @@ def with_regist_info @groups = groups @record = @groups.map do |group| { - "group": group, - "group_category": group.group_category&.name, - "sub_rep": group.sub_rep&.to_info_h, - "place_order": group.place_order&.to_place_name_h, - "stage_orders": if group.stage_orders.count.zero? - nil - else - group.stage_orders.map do |stage_order| - { - "stage_order": stage_order.to_info_h - } - end - end, - "stage_common_option": group.stage_common_option&.to_info_h, - "power_orders": if group.power_orders.count.zero? - nil - else - group.power_orders.map do |power_order| - { - "power_order": power_order.to_info_h - } - end - end, - "rental_orders": if group.rental_orders.count.zero? - nil - else - group.rental_orders.map do |rental_order| - { - "rental_item": rental_order.to_rental_item_info_h - } - end - end, - "employees": if group.employees.count.zero? - nil - else - group.employees.map do |employee| - { - "employee": employee.to_info_h - } - end - end, - "food_products": if group.food_products.count.zero? - nil - else - group.food_products.map do |food_product| - { - "food_product": food_product.to_info_h, - "purchase_lists": food_product.purchase_lists.map do |purchase_list| - { - "purchase_list": purchase_list.to_info_h - } - end - } - end + group: group, + group_category: group.group_category&.name, + sub_rep: group.sub_rep&.to_info_h, + place_order: group.place_order&.to_place_name_h, + stage_orders: if group.stage_orders.count.zero? + nil + else + group.stage_orders.map do |stage_order| + { + stage_order: stage_order.to_info_h + } + end + end, + stage_common_option: group.stage_common_option&.to_info_h, + power_orders: if group.power_orders.count.zero? + nil + else + group.power_orders.map do |power_order| + { + power_order: power_order.to_info_h + } + end + end, + rental_orders: if group.rental_orders.count.zero? + nil + else + group.rental_orders.map do |rental_order| + { + rental_item: rental_order.to_rental_item_info_h + } + end + end, + employees: if group.employees.count.zero? + nil + else + group.employees.map do |employee| + { + employee: employee.to_info_h + } + end + end, + food_products: if group.food_products.count.zero? + nil + else + group.food_products.map do |food_product| + { + food_product: food_product.to_info_h, + purchase_lists: food_product.purchase_lists.map do |purchase_list| + { + purchase_list: purchase_list.to_info_h + } + end + } end + end } end @record diff --git a/api/app/models/user_detail.rb b/api/app/models/user_detail.rb index 7067bfad8..f987eaceb 100644 --- a/api/app/models/user_detail.rb +++ b/api/app/models/user_detail.rb @@ -8,12 +8,12 @@ class UserDetail < ApplicationRecord # ユーザー詳細の情報の日本語をハッシュにして返す def to_info_h { - "student_id": student_id, - "department_id": department.id, - "department": department.name, - "grade_id": grade_id, - "grade": grade.name, - "tel": tel + student_id: student_id, + department_id: department.id, + department: department.name, + grade_id: grade_id, + grade: grade.name, + tel: tel } end end diff --git a/api/bin/bundle b/api/bin/bundle index 73ec94756..12f63b60b 100755 --- a/api/bin/bundle +++ b/api/bin/bundle @@ -97,9 +97,7 @@ m = Module.new do require_error = activation_error_handling do require 'bundler/version' end - if require_error.nil? && Gem::Requirement.new(bundler_requirement).satisfied_by?(Gem::Version.new(Bundler::VERSION)) - return - end + return if require_error.nil? && Gem::Requirement.new(bundler_requirement).satisfied_by?(Gem::Version.new(Bundler::VERSION)) warn "Activating bundler (#{bundler_requirement}) failed:\n#{gem_error.message}\n\nTo install the version of bundler this project requires, run `gem install bundler -v '#{bundler_requirement}'`" exit 42 diff --git a/api/config/environments/development.rb b/api/config/environments/development.rb index 7155b9a77..95ef74e9a 100644 --- a/api/config/environments/development.rb +++ b/api/config/environments/development.rb @@ -16,7 +16,7 @@ # Enable/disable caching. By default caching is disabled. # Run rails dev:cache to toggle caching. - if Rails.root.join('tmp', 'caching-dev.txt').exist? + if Rails.root.join('tmp/caching-dev.txt').exist? config.cache_store = :memory_store config.public_file_server.headers = { 'Cache-Control' => "public, max-age=#{2.days.to_i}" diff --git a/api/config/environments/production.rb b/api/config/environments/production.rb index 018d13189..99460602c 100644 --- a/api/config/environments/production.rb +++ b/api/config/environments/production.rb @@ -69,7 +69,7 @@ config.active_support.deprecation = :notify # Use default logging formatter so that PID and timestamp are not suppressed. - config.log_formatter = ::Logger::Formatter.new + config.log_formatter = Logger::Formatter.new # Use a different logger for distributed setups. # require 'syslog/logger' diff --git a/api/db/schema.rb b/api/db/schema.rb index 0f8cfb6a9..a5419cc45 100644 --- a/api/db/schema.rb +++ b/api/db/schema.rb @@ -1,5 +1,3 @@ -# frozen_string_literal: true - # This file is auto-generated from the current state of the database. Instead # of editing this file, please use the migrations feature of Active Record to # incrementally modify your database, and then regenerate this schema definition. @@ -12,434 +10,435 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20_240_522_012_844) do - create_table 'announcements', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.integer 'group_id' - t.text 'message' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - t.string 'status' +ActiveRecord::Schema.define(version: 2024_05_22_012844) do + + create_table "announcements", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.integer "group_id" + t.text "message" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.string "status" end - create_table 'assign_group_places', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.integer 'place_order_id' - t.integer 'place_id' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false + create_table "assign_group_places", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.integer "place_order_id" + t.integer "place_id" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false end - create_table 'assign_rental_items', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.integer 'group_id' - t.integer 'rental_item_id' - t.integer 'num' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - t.integer 'stocker_place_id' + create_table "assign_rental_items", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.integer "group_id" + t.integer "rental_item_id" + t.integer "num" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.integer "stocker_place_id" end - create_table 'assign_stages', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.integer 'stage_order_id' - t.integer 'stage_id' - t.string 'time_point_start' - t.string 'time_point_end' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - end - - create_table 'contact_people', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.integer 'group_id' - t.string 'name' - t.string 'email' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - end - - create_table 'cooking_process_orders', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.bigint 'group_id', null: false - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - t.boolean 'pre_open_kitchen', default: false, null: false - t.boolean 'during_open_kitchen', default: false, null: false - t.text 'tent' - t.index ['group_id'], name: 'index_cooking_process_orders_on_group_id' - end - - create_table 'current_stocks', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.integer 'place_category_id' - t.integer 'place_id' - t.integer 'item_id' - t.integer 'stock_num' - t.integer 'date_id' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - end - - create_table 'departments', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.string 'name' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - end - - create_table 'employees', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.integer 'group_id' - t.string 'name' - t.integer 'student_id' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - t.integer 'stool_test_id' - end - - create_table 'fes_dates', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.integer 'days_num' - t.string 'date' - t.string 'day' - t.integer 'fes_year_id' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - end - - create_table 'fes_years', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.integer 'year_num' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - end - - create_table 'food_products', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.integer 'group_id' - t.string 'name' - t.boolean 'is_cooking' - t.integer 'first_day_num' - t.integer 'second_day_num' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - end - - create_table 'grades', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.string 'name' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - end - - create_table 'group_categories', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.string 'name' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - end - - create_table 'group_identifications', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.integer 'group_id' - t.integer 'number' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - end - - create_table 'groups', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.string 'name' - t.string 'project_name' - t.text 'activity' - t.integer 'user_id' - t.integer 'group_category_id' - t.integer 'fes_year_id' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - t.boolean 'committee' - t.boolean 'is_international' - t.boolean 'is_external' - end - - create_table 'item_adjustments', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.integer 'group_id' - t.integer 'use_place_id' - t.integer 'rental_place_id' - t.integer 'item_id' - t.integer 'item_num' - t.integer 'people_num' - t.datetime 'time_start' - t.datetime 'time_end' - t.integer 'date_id' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - end - - create_table 'memos', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.text 'content' - t.integer 'user_id' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - end - - create_table 'news', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.string 'title' - t.text 'body' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - end - - create_table 'place_allow_lists', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.integer 'place_id' - t.integer 'group_category_id' - t.boolean 'enable' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - end - - create_table 'place_numbers', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.integer 'place_id' - t.integer 'group_identification_id' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - end - - create_table 'place_orders', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.integer 'group_id' - t.integer 'first' - t.integer 'second' - t.integer 'third' - t.text 'remark' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - end - - create_table 'places', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.string 'name' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - end - - create_table 'power_orders', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.integer 'group_id' - t.string 'item' - t.integer 'power' - t.string 'manufacturer' - t.string 'model' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - t.string 'item_url' - end - - create_table 'public_relations', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.integer 'group_id' - t.string 'picture_name' - t.string 'picture_path' - t.text 'blurb' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - end - - create_table 'purchase_lists', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.integer 'food_product_id' - t.integer 'shop_id' - t.integer 'fes_date_id' - t.string 'items' - t.boolean 'is_fresh' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - t.string 'purchase_date' - t.string 'url' - end - - create_table 'rentable_items', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.integer 'stocker_item_id' - t.integer 'stocker_place_id' - t.integer 'max_num' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - end - - create_table 'rental_item_allow_lists', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.integer 'rental_item_id' - t.integer 'group_category_id' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - end - - create_table 'rental_items', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.string 'name' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - t.boolean 'is_stage_rentable' - t.boolean 'is_inside_shop_rentable' - t.boolean 'is_outside_shop_rentable' - end - - create_table 'rental_orders', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.integer 'group_id' - t.integer 'rental_item_id' - t.integer 'num' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - end - - create_table 'roles', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.string 'name' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - end - - create_table 'shops', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.string 'name' - t.string 'tel' - t.string 'opening_hours' - t.string 'address' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - end - - create_table 'stage_common_options', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.integer 'group_id' - t.boolean 'own_equipment' - t.boolean 'bgm' - t.boolean 'camera_permission' - t.boolean 'loud_sound' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - end - - create_table 'stage_numbers', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.integer 'stage_id' - t.integer 'group_identification_id' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - end - - create_table 'stage_orders', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.integer 'group_id' - t.boolean 'is_sunny' - t.integer 'fes_date_id' - t.integer 'stage_first' - t.integer 'stage_second' - t.string 'use_time_interval' - t.string 'prepare_time_interval' - t.string 'cleanup_time_interval' - t.string 'prepare_start_time' - t.string 'performance_start_time' - t.string 'performance_end_time' - t.string 'cleanup_end_time' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - end - - create_table 'stages', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.string 'name' - t.boolean 'enable_sunny' - t.boolean 'enable_rainy' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - end - - create_table 'stocker_items', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.integer 'rental_item_id' - t.integer 'stocker_place_id' - t.integer 'fes_year_id' - t.integer 'num' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - end - - create_table 'stocker_places', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.string 'name' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - t.integer 'stock_item_status' - t.integer 'assign_item_status' - end - - create_table 'stool_tests', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.string 'status' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - end - - create_table 'sub_reps', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.integer 'group_id' - t.string 'name' - t.integer 'department_id' - t.integer 'grade_id' - t.string 'tel' - t.string 'email' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - t.integer 'student_id' - end - - create_table 'user_details', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.string 'tel' - t.integer 'grade_id' - t.integer 'department_id' - t.bigint 'user_id', null: false - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - t.integer 'student_id' - t.index ['user_id'], name: 'index_user_details_on_user_id' - end - - create_table 'user_page_settings', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.boolean 'is_regist_group' - t.boolean 'is_regist_food_product' - t.boolean 'is_edit_group' - t.boolean 'is_edit_sub_rep' - t.boolean 'is_edit_place' - t.boolean 'is_edit_power_order' - t.boolean 'is_edit_rental_order' - t.boolean 'is_edit_stage_order' - t.boolean 'is_edit_employee' - t.boolean 'is_edit_food_product' - t.boolean 'is_edit_purchase_list' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - t.boolean 'add_power_order' - t.boolean 'add_rental_order' - t.boolean 'add_employee' - t.boolean 'add_food_product' - t.boolean 'add_purchase_list' - t.integer 'fes_year_id' - t.boolean 'is_edit_announcement' - t.boolean 'add_announcement' - t.boolean 'is_edit_user' - t.boolean 'is_edit_stage_common_option' - t.boolean 'is_edit_public_relation' - t.boolean 'is_edit_venue_map' - t.boolean 'is_edit_cooking_process' - t.boolean 'add_stage_order' - end - - create_table 'users', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.string 'provider', default: 'email', null: false - t.string 'uid', default: '', null: false - t.string 'encrypted_password', default: '', null: false - t.string 'reset_password_token' - t.datetime 'reset_password_sent_at' - t.boolean 'allow_password_change', default: false - t.datetime 'remember_created_at' - t.integer 'sign_in_count', default: 0, null: false - t.datetime 'current_sign_in_at' - t.datetime 'last_sign_in_at' - t.string 'current_sign_in_ip' - t.string 'last_sign_in_ip' - t.string 'confirmation_token' - t.datetime 'confirmed_at' - t.datetime 'confirmation_sent_at' - t.string 'unconfirmed_email' - t.string 'name' - t.string 'email' - t.integer 'role_id' - t.text 'tokens' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - t.index ['confirmation_token'], name: 'index_users_on_confirmation_token', unique: true - t.index ['email'], name: 'index_users_on_email', unique: true - t.index ['reset_password_token'], name: 'index_users_on_reset_password_token', unique: true - t.index %w[uid provider], name: 'index_users_on_uid_and_provider', unique: true - end - - create_table 'venue_maps', charset: 'utf8mb4', collation: 'utf8mb4_0900_ai_ci', force: :cascade do |t| - t.integer 'group_id' - t.string 'picture_name' - t.string 'picture_path' - t.datetime 'created_at', precision: 6, null: false - t.datetime 'updated_at', precision: 6, null: false - end - - add_foreign_key 'cooking_process_orders', 'groups' - add_foreign_key 'user_details', 'users' + create_table "assign_stages", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.integer "stage_order_id" + t.integer "stage_id" + t.string "time_point_start" + t.string "time_point_end" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + + create_table "contact_people", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.integer "group_id" + t.string "name" + t.string "email" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + + create_table "cooking_process_orders", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.bigint "group_id", null: false + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.boolean "pre_open_kitchen", default: false, null: false + t.boolean "during_open_kitchen", default: false, null: false + t.text "tent" + t.index ["group_id"], name: "index_cooking_process_orders_on_group_id" + end + + create_table "current_stocks", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.integer "place_category_id" + t.integer "place_id" + t.integer "item_id" + t.integer "stock_num" + t.integer "date_id" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + + create_table "departments", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.string "name" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + + create_table "employees", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.integer "group_id" + t.string "name" + t.integer "student_id" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.integer "stool_test_id" + end + + create_table "fes_dates", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.integer "days_num" + t.string "date" + t.string "day" + t.integer "fes_year_id" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + + create_table "fes_years", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.integer "year_num" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + + create_table "food_products", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.integer "group_id" + t.string "name" + t.boolean "is_cooking" + t.integer "first_day_num" + t.integer "second_day_num" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + + create_table "grades", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.string "name" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + + create_table "group_categories", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.string "name" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + + create_table "group_identifications", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.integer "group_id" + t.integer "number" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + + create_table "groups", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.string "name" + t.string "project_name" + t.text "activity" + t.integer "user_id" + t.integer "group_category_id" + t.integer "fes_year_id" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.boolean "committee" + t.boolean "is_international" + t.boolean "is_external" + end + + create_table "item_adjustments", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.integer "group_id" + t.integer "use_place_id" + t.integer "rental_place_id" + t.integer "item_id" + t.integer "item_num" + t.integer "people_num" + t.datetime "time_start" + t.datetime "time_end" + t.integer "date_id" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + + create_table "memos", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.text "content" + t.integer "user_id" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + + create_table "news", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.string "title" + t.text "body" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + + create_table "place_allow_lists", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.integer "place_id" + t.integer "group_category_id" + t.boolean "enable" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + + create_table "place_numbers", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.integer "place_id" + t.integer "group_identification_id" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + + create_table "place_orders", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.integer "group_id" + t.integer "first" + t.integer "second" + t.integer "third" + t.text "remark" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + + create_table "places", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.string "name" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + + create_table "power_orders", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.integer "group_id" + t.string "item" + t.integer "power" + t.string "manufacturer" + t.string "model" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.string "item_url" + end + + create_table "public_relations", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.integer "group_id" + t.string "picture_name" + t.string "picture_path" + t.text "blurb" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + + create_table "purchase_lists", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.integer "food_product_id" + t.integer "shop_id" + t.integer "fes_date_id" + t.string "items" + t.boolean "is_fresh" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.string "purchase_date" + t.string "url" + end + + create_table "rentable_items", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.integer "stocker_item_id" + t.integer "stocker_place_id" + t.integer "max_num" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + + create_table "rental_item_allow_lists", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.integer "rental_item_id" + t.integer "group_category_id" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + + create_table "rental_items", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.string "name" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.boolean "is_stage_rentable" + t.boolean "is_inside_shop_rentable" + t.boolean "is_outside_shop_rentable" + end + + create_table "rental_orders", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.integer "group_id" + t.integer "rental_item_id" + t.integer "num" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + + create_table "roles", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.string "name" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + + create_table "shops", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.string "name" + t.string "tel" + t.string "opening_hours" + t.string "address" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + + create_table "stage_common_options", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.integer "group_id" + t.boolean "own_equipment" + t.boolean "bgm" + t.boolean "camera_permission" + t.boolean "loud_sound" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + + create_table "stage_numbers", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.integer "stage_id" + t.integer "group_identification_id" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + + create_table "stage_orders", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.integer "group_id" + t.boolean "is_sunny" + t.integer "fes_date_id" + t.integer "stage_first" + t.integer "stage_second" + t.string "use_time_interval" + t.string "prepare_time_interval" + t.string "cleanup_time_interval" + t.string "prepare_start_time" + t.string "performance_start_time" + t.string "performance_end_time" + t.string "cleanup_end_time" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + + create_table "stages", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.string "name" + t.boolean "enable_sunny" + t.boolean "enable_rainy" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + + create_table "stocker_items", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.integer "rental_item_id" + t.integer "stocker_place_id" + t.integer "fes_year_id" + t.integer "num" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + + create_table "stocker_places", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.string "name" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.integer "stock_item_status" + t.integer "assign_item_status" + end + + create_table "stool_tests", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.string "status" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + + create_table "sub_reps", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.integer "group_id" + t.string "name" + t.integer "department_id" + t.integer "grade_id" + t.string "tel" + t.string "email" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.integer "student_id" + end + + create_table "user_details", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.string "tel" + t.integer "grade_id" + t.integer "department_id" + t.bigint "user_id", null: false + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.integer "student_id" + t.index ["user_id"], name: "index_user_details_on_user_id" + end + + create_table "user_page_settings", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.boolean "is_regist_group" + t.boolean "is_regist_food_product" + t.boolean "is_edit_group" + t.boolean "is_edit_sub_rep" + t.boolean "is_edit_place" + t.boolean "is_edit_power_order" + t.boolean "is_edit_rental_order" + t.boolean "is_edit_stage_order" + t.boolean "is_edit_employee" + t.boolean "is_edit_food_product" + t.boolean "is_edit_purchase_list" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.boolean "add_power_order" + t.boolean "add_rental_order" + t.boolean "add_employee" + t.boolean "add_food_product" + t.boolean "add_purchase_list" + t.integer "fes_year_id" + t.boolean "is_edit_announcement" + t.boolean "add_announcement" + t.boolean "is_edit_user" + t.boolean "is_edit_stage_common_option" + t.boolean "is_edit_public_relation" + t.boolean "is_edit_venue_map" + t.boolean "is_edit_cooking_process" + t.boolean "add_stage_order" + end + + create_table "users", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.string "provider", default: "email", null: false + t.string "uid", default: "", null: false + t.string "encrypted_password", default: "", null: false + t.string "reset_password_token" + t.datetime "reset_password_sent_at" + t.boolean "allow_password_change", default: false + t.datetime "remember_created_at" + t.integer "sign_in_count", default: 0, null: false + t.datetime "current_sign_in_at" + t.datetime "last_sign_in_at" + t.string "current_sign_in_ip" + t.string "last_sign_in_ip" + t.string "confirmation_token" + t.datetime "confirmed_at" + t.datetime "confirmation_sent_at" + t.string "unconfirmed_email" + t.string "name" + t.string "email" + t.integer "role_id" + t.text "tokens" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true + t.index ["email"], name: "index_users_on_email", unique: true + t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true + t.index ["uid", "provider"], name: "index_users_on_uid_and_provider", unique: true + end + + create_table "venue_maps", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.integer "group_id" + t.string "picture_name" + t.string "picture_path" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + end + + add_foreign_key "cooking_process_orders", "groups" + add_foreign_key "user_details", "users" end diff --git a/api/test/controllers/assign_group_places_controller_test.rb b/api/test/controllers/assign_group_places_controller_test.rb index 95ec7fe81..dc068199b 100644 --- a/api/test/controllers/assign_group_places_controller_test.rb +++ b/api/test/controllers/assign_group_places_controller_test.rb @@ -18,7 +18,7 @@ class AssignGroupPlacesControllerTest < ActionDispatch::IntegrationTest params: { assign_group_place: { place_id: @assign_group_place.place_id, place_order_id: @assign_group_place.place_order_id } }, as: :json end - assert_response 201 + assert_response :created end test 'should show assign_group_place' do @@ -29,7 +29,7 @@ class AssignGroupPlacesControllerTest < ActionDispatch::IntegrationTest test 'should update assign_group_place' do patch assign_group_place_url(@assign_group_place), params: { assign_group_place: { place_id: @assign_group_place.place_id, place_order_id: @assign_group_place.place_order_id } }, as: :json - assert_response 200 + assert_response :ok end test 'should destroy assign_group_place' do @@ -37,6 +37,6 @@ class AssignGroupPlacesControllerTest < ActionDispatch::IntegrationTest delete assign_group_place_url(@assign_group_place), as: :json end - assert_response 204 + assert_response :no_content end end diff --git a/api/test/controllers/assign_rental_items_controller_test.rb b/api/test/controllers/assign_rental_items_controller_test.rb index 4a5608d0f..b74468ef5 100644 --- a/api/test/controllers/assign_rental_items_controller_test.rb +++ b/api/test/controllers/assign_rental_items_controller_test.rb @@ -18,7 +18,7 @@ class AssignRentalItemsControllerTest < ActionDispatch::IntegrationTest params: { assign_rental_item: { num: @assign_rental_item.num, rentable_item_id: @assign_rental_item.rentable_item_id, rental_order_id: @assign_rental_item.rental_order_id } }, as: :json end - assert_response 201 + assert_response :created end test 'should show assign_rental_item' do @@ -29,7 +29,7 @@ class AssignRentalItemsControllerTest < ActionDispatch::IntegrationTest test 'should update assign_rental_item' do patch assign_rental_item_url(@assign_rental_item), params: { assign_rental_item: { num: @assign_rental_item.num, rentable_item_id: @assign_rental_item.rentable_item_id, rental_order_id: @assign_rental_item.rental_order_id } }, as: :json - assert_response 200 + assert_response :ok end test 'should destroy assign_rental_item' do @@ -37,6 +37,6 @@ class AssignRentalItemsControllerTest < ActionDispatch::IntegrationTest delete assign_rental_item_url(@assign_rental_item), as: :json end - assert_response 204 + assert_response :no_content end end diff --git a/api/test/controllers/assign_stages_controller_test.rb b/api/test/controllers/assign_stages_controller_test.rb index bd727eddb..a0116447b 100644 --- a/api/test/controllers/assign_stages_controller_test.rb +++ b/api/test/controllers/assign_stages_controller_test.rb @@ -18,7 +18,7 @@ class AssignStagesControllerTest < ActionDispatch::IntegrationTest params: { assign_stage: { stage_id: @assign_stage.stage_id, stage_order_id: @assign_stage.stage_order_id, time_point_end: @assign_stage.time_point_end, time_point_start: @assign_stage.time_point_start } }, as: :json end - assert_response 201 + assert_response :created end test 'should show assign_stage' do @@ -29,7 +29,7 @@ class AssignStagesControllerTest < ActionDispatch::IntegrationTest test 'should update assign_stage' do patch assign_stage_url(@assign_stage), params: { assign_stage: { stage_id: @assign_stage.stage_id, stage_order_id: @assign_stage.stage_order_id, time_point_end: @assign_stage.time_point_end, time_point_start: @assign_stage.time_point_start } }, as: :json - assert_response 200 + assert_response :ok end test 'should destroy assign_stage' do @@ -37,6 +37,6 @@ class AssignStagesControllerTest < ActionDispatch::IntegrationTest delete assign_stage_url(@assign_stage), as: :json end - assert_response 204 + assert_response :no_content end end diff --git a/api/test/controllers/employees_controller_test.rb b/api/test/controllers/employees_controller_test.rb index c66f5ddff..7462bf63c 100644 --- a/api/test/controllers/employees_controller_test.rb +++ b/api/test/controllers/employees_controller_test.rb @@ -18,7 +18,7 @@ class EmployeesControllerTest < ActionDispatch::IntegrationTest params: { employee: { employee_category_id: @employee.employee_category_id, group_id: @employee.group_id, name: @employee.name, student_id: @employee.student_id } }, as: :json end - assert_response 201 + assert_response :created end test 'should show employee' do @@ -29,7 +29,7 @@ class EmployeesControllerTest < ActionDispatch::IntegrationTest test 'should update employee' do patch employee_url(@employee), params: { employee: { employee_category_id: @employee.employee_category_id, group_id: @employee.group_id, name: @employee.name, student_id: @employee.student_id } }, as: :json - assert_response 200 + assert_response :ok end test 'should destroy employee' do @@ -37,6 +37,6 @@ class EmployeesControllerTest < ActionDispatch::IntegrationTest delete employee_url(@employee), as: :json end - assert_response 204 + assert_response :no_content end end diff --git a/api/test/controllers/food_products_controller_test.rb b/api/test/controllers/food_products_controller_test.rb index 5bdda25ba..ad47d0a4d 100644 --- a/api/test/controllers/food_products_controller_test.rb +++ b/api/test/controllers/food_products_controller_test.rb @@ -18,7 +18,7 @@ class FoodProductsControllerTest < ActionDispatch::IntegrationTest params: { food_product: { first_day_num: @food_product.first_day_num, group_id: @food_product.group_id, is_cooking: @food_product.is_cooking, name: @food_product.name, second_day_num: @food_product.second_day_num } }, as: :json end - assert_response 201 + assert_response :created end test 'should show food_product' do @@ -29,7 +29,7 @@ class FoodProductsControllerTest < ActionDispatch::IntegrationTest test 'should update food_product' do patch food_product_url(@food_product), params: { food_product: { first_day_num: @food_product.first_day_num, group_id: @food_product.group_id, is_cooking: @food_product.is_cooking, name: @food_product.name, second_day_num: @food_product.second_day_num } }, as: :json - assert_response 200 + assert_response :ok end test 'should destroy food_product' do @@ -37,6 +37,6 @@ class FoodProductsControllerTest < ActionDispatch::IntegrationTest delete food_product_url(@food_product), as: :json end - assert_response 204 + assert_response :no_content end end diff --git a/api/test/controllers/groups_controller_test.rb b/api/test/controllers/groups_controller_test.rb index 6d1e9c511..5e47adf67 100644 --- a/api/test/controllers/groups_controller_test.rb +++ b/api/test/controllers/groups_controller_test.rb @@ -18,7 +18,7 @@ class GroupsControllerTest < ActionDispatch::IntegrationTest params: { group: { activity: @group.activity, fes_year_id: @group.fes_year_id, group_category_id: @group.group_category_id, name: @group.name, project_name: @group.project_name, user_id: @group.user_id } }, as: :json end - assert_response 201 + assert_response :created end test 'should show group' do @@ -29,7 +29,7 @@ class GroupsControllerTest < ActionDispatch::IntegrationTest test 'should update group' do patch group_url(@group), params: { group: { activity: @group.activity, fes_year_id: @group.fes_year_id, group_category_id: @group.group_category_id, name: @group.name, project_name: @group.project_name, user_id: @group.user_id } }, as: :json - assert_response 200 + assert_response :ok end test 'should destroy group' do @@ -37,6 +37,6 @@ class GroupsControllerTest < ActionDispatch::IntegrationTest delete group_url(@group), as: :json end - assert_response 204 + assert_response :no_content end end diff --git a/api/test/controllers/memos_controller_test.rb b/api/test/controllers/memos_controller_test.rb index 74b32e5f6..146d07c8b 100644 --- a/api/test/controllers/memos_controller_test.rb +++ b/api/test/controllers/memos_controller_test.rb @@ -17,7 +17,7 @@ class MemosControllerTest < ActionDispatch::IntegrationTest post memos_url, params: { memo: { content: @memo.content, user_id: @memo.user_id } }, as: :json end - assert_response 201 + assert_response :created end test 'should show memo' do @@ -27,7 +27,7 @@ class MemosControllerTest < ActionDispatch::IntegrationTest test 'should update memo' do patch memo_url(@memo), params: { memo: { content: @memo.content, user_id: @memo.user_id } }, as: :json - assert_response 200 + assert_response :ok end test 'should destroy memo' do @@ -35,6 +35,6 @@ class MemosControllerTest < ActionDispatch::IntegrationTest delete memo_url(@memo), as: :json end - assert_response 204 + assert_response :no_content end end diff --git a/api/test/controllers/news_controller_test.rb b/api/test/controllers/news_controller_test.rb index 10d39364b..33b05ab94 100644 --- a/api/test/controllers/news_controller_test.rb +++ b/api/test/controllers/news_controller_test.rb @@ -17,7 +17,7 @@ class NewsControllerTest < ActionDispatch::IntegrationTest post news_index_url, params: { news: { body: @news.body, title: @news.title } }, as: :json end - assert_response 201 + assert_response :created end test 'should show news' do @@ -27,7 +27,7 @@ class NewsControllerTest < ActionDispatch::IntegrationTest test 'should update news' do patch news_url(@news), params: { news: { body: @news.body, title: @news.title } }, as: :json - assert_response 200 + assert_response :ok end test 'should destroy news' do @@ -35,6 +35,6 @@ class NewsControllerTest < ActionDispatch::IntegrationTest delete news_url(@news), as: :json end - assert_response 204 + assert_response :no_content end end diff --git a/api/test/controllers/place_allow_lists_controller_test.rb b/api/test/controllers/place_allow_lists_controller_test.rb index 6dc4e1fc4..8ecfac103 100644 --- a/api/test/controllers/place_allow_lists_controller_test.rb +++ b/api/test/controllers/place_allow_lists_controller_test.rb @@ -18,7 +18,7 @@ class PlaceAllowListsControllerTest < ActionDispatch::IntegrationTest params: { place_allow_list: { enable: @place_allow_list.enable, group_category_id: @place_allow_list.group_category_id, place_id: @place_allow_list.place_id } }, as: :json end - assert_response 201 + assert_response :created end test 'should show place_allow_list' do @@ -29,7 +29,7 @@ class PlaceAllowListsControllerTest < ActionDispatch::IntegrationTest test 'should update place_allow_list' do patch place_allow_list_url(@place_allow_list), params: { place_allow_list: { enable: @place_allow_list.enable, group_category_id: @place_allow_list.group_category_id, place_id: @place_allow_list.place_id } }, as: :json - assert_response 200 + assert_response :ok end test 'should destroy place_allow_list' do @@ -37,6 +37,6 @@ class PlaceAllowListsControllerTest < ActionDispatch::IntegrationTest delete place_allow_list_url(@place_allow_list), as: :json end - assert_response 204 + assert_response :no_content end end diff --git a/api/test/controllers/place_orders_controller_test.rb b/api/test/controllers/place_orders_controller_test.rb index ad3902b16..47e3dd5b0 100644 --- a/api/test/controllers/place_orders_controller_test.rb +++ b/api/test/controllers/place_orders_controller_test.rb @@ -18,7 +18,7 @@ class PlaceOrdersControllerTest < ActionDispatch::IntegrationTest params: { place_order: { first: @place_order.first, group_id: @place_order.group_id, remark: @place_order.remark, second: @place_order.second, third: @place_order.third } }, as: :json end - assert_response 201 + assert_response :created end test 'should show place_order' do @@ -29,7 +29,7 @@ class PlaceOrdersControllerTest < ActionDispatch::IntegrationTest test 'should update place_order' do patch place_order_url(@place_order), params: { place_order: { first: @place_order.first, group_id: @place_order.group_id, remark: @place_order.remark, second: @place_order.second, third: @place_order.third } }, as: :json - assert_response 200 + assert_response :ok end test 'should destroy place_order' do @@ -37,6 +37,6 @@ class PlaceOrdersControllerTest < ActionDispatch::IntegrationTest delete place_order_url(@place_order), as: :json end - assert_response 204 + assert_response :no_content end end diff --git a/api/test/controllers/power_orders_controller_test.rb b/api/test/controllers/power_orders_controller_test.rb index 409ecbbdc..fd4ce80bd 100644 --- a/api/test/controllers/power_orders_controller_test.rb +++ b/api/test/controllers/power_orders_controller_test.rb @@ -18,7 +18,7 @@ class PowerOrdersControllerTest < ActionDispatch::IntegrationTest params: { power_order: { group_id: @power_order.group_id, item: @power_order.item, manufacture: @power_order.manufacture, model: @power_order.model, power: @power_order.power } }, as: :json end - assert_response 201 + assert_response :created end test 'should show power_order' do @@ -29,7 +29,7 @@ class PowerOrdersControllerTest < ActionDispatch::IntegrationTest test 'should update power_order' do patch power_order_url(@power_order), params: { power_order: { group_id: @power_order.group_id, item: @power_order.item, manufacture: @power_order.manufacture, model: @power_order.model, power: @power_order.power } }, as: :json - assert_response 200 + assert_response :ok end test 'should destroy power_order' do @@ -37,6 +37,6 @@ class PowerOrdersControllerTest < ActionDispatch::IntegrationTest delete power_order_url(@power_order), as: :json end - assert_response 204 + assert_response :no_content end end diff --git a/api/test/controllers/public_relations_controller_test.rb b/api/test/controllers/public_relations_controller_test.rb index 2b30eb8f5..9e90d3b5a 100644 --- a/api/test/controllers/public_relations_controller_test.rb +++ b/api/test/controllers/public_relations_controller_test.rb @@ -18,7 +18,7 @@ class PublicRelationsControllerTest < ActionDispatch::IntegrationTest params: { public_relation: { blurb: @public_relation.blurb, group_id: @public_relation.group_id, picture_path: @public_relation.picture_path } }, as: :json end - assert_response 201 + assert_response :created end test 'should show public_relation' do @@ -29,7 +29,7 @@ class PublicRelationsControllerTest < ActionDispatch::IntegrationTest test 'should update public_relation' do patch public_relation_url(@public_relation), params: { public_relation: { blurb: @public_relation.blurb, group_id: @public_relation.group_id, picture_path: @public_relation.picture_path } }, as: :json - assert_response 200 + assert_response :ok end test 'should destroy public_relation' do @@ -37,6 +37,6 @@ class PublicRelationsControllerTest < ActionDispatch::IntegrationTest delete public_relation_url(@public_relation), as: :json end - assert_response 204 + assert_response :no_content end end diff --git a/api/test/controllers/purchase_lists_controller_test.rb b/api/test/controllers/purchase_lists_controller_test.rb index b813f0bb4..fb1cc17ab 100644 --- a/api/test/controllers/purchase_lists_controller_test.rb +++ b/api/test/controllers/purchase_lists_controller_test.rb @@ -18,7 +18,7 @@ class PurchaseListsControllerTest < ActionDispatch::IntegrationTest params: { purchase_list: { fes_date_id: @purchase_list.fes_date_id, food_product_id: @purchase_list.food_product_id, is_fresh: @purchase_list.is_fresh, items: @purchase_list.items, shop_id: @purchase_list.shop_id } }, as: :json end - assert_response 201 + assert_response :created end test 'should show purchase_list' do @@ -29,7 +29,7 @@ class PurchaseListsControllerTest < ActionDispatch::IntegrationTest test 'should update purchase_list' do patch purchase_list_url(@purchase_list), params: { purchase_list: { fes_date_id: @purchase_list.fes_date_id, food_product_id: @purchase_list.food_product_id, is_fresh: @purchase_list.is_fresh, items: @purchase_list.items, shop_id: @purchase_list.shop_id } }, as: :json - assert_response 200 + assert_response :ok end test 'should destroy purchase_list' do @@ -37,6 +37,6 @@ class PurchaseListsControllerTest < ActionDispatch::IntegrationTest delete purchase_list_url(@purchase_list), as: :json end - assert_response 204 + assert_response :no_content end end diff --git a/api/test/controllers/rentable_items_controller_test.rb b/api/test/controllers/rentable_items_controller_test.rb index 28641af0d..bd6908e4d 100644 --- a/api/test/controllers/rentable_items_controller_test.rb +++ b/api/test/controllers/rentable_items_controller_test.rb @@ -18,7 +18,7 @@ class RentableItemsControllerTest < ActionDispatch::IntegrationTest params: { rentable_item: { max_num: @rentable_item.max_num, stocker_item_id: @rentable_item.stocker_item_id, stocker_place_id: @rentable_item.stocker_place_id } }, as: :json end - assert_response 201 + assert_response :created end test 'should show rentable_item' do @@ -29,7 +29,7 @@ class RentableItemsControllerTest < ActionDispatch::IntegrationTest test 'should update rentable_item' do patch rentable_item_url(@rentable_item), params: { rentable_item: { max_num: @rentable_item.max_num, stocker_item_id: @rentable_item.stocker_item_id, stocker_place_id: @rentable_item.stocker_place_id } }, as: :json - assert_response 200 + assert_response :ok end test 'should destroy rentable_item' do @@ -37,6 +37,6 @@ class RentableItemsControllerTest < ActionDispatch::IntegrationTest delete rentable_item_url(@rentable_item), as: :json end - assert_response 204 + assert_response :no_content end end diff --git a/api/test/controllers/rental_orders_controller_test.rb b/api/test/controllers/rental_orders_controller_test.rb index 0556b84f9..07b48a425 100644 --- a/api/test/controllers/rental_orders_controller_test.rb +++ b/api/test/controllers/rental_orders_controller_test.rb @@ -18,7 +18,7 @@ class RentalOrdersControllerTest < ActionDispatch::IntegrationTest params: { rental_order: { group_id: @rental_order.group_id, num: @rental_order.num, rental_item_id: @rental_order.rental_item_id } }, as: :json end - assert_response 201 + assert_response :created end test 'should show rental_order' do @@ -29,7 +29,7 @@ class RentalOrdersControllerTest < ActionDispatch::IntegrationTest test 'should update rental_order' do patch rental_order_url(@rental_order), params: { rental_order: { group_id: @rental_order.group_id, num: @rental_order.num, rental_item_id: @rental_order.rental_item_id } }, as: :json - assert_response 200 + assert_response :ok end test 'should destroy rental_order' do @@ -37,6 +37,6 @@ class RentalOrdersControllerTest < ActionDispatch::IntegrationTest delete rental_order_url(@rental_order), as: :json end - assert_response 204 + assert_response :no_content end end diff --git a/api/test/controllers/stage_common_options_controller_test.rb b/api/test/controllers/stage_common_options_controller_test.rb index 404369791..aee63e46e 100644 --- a/api/test/controllers/stage_common_options_controller_test.rb +++ b/api/test/controllers/stage_common_options_controller_test.rb @@ -18,7 +18,7 @@ class StageCommonOptionsControllerTest < ActionDispatch::IntegrationTest params: { stage_common_option: { bgm: @stage_common_option.bgm, camera_permission: @stage_common_option.camera_permission, group_id: @stage_common_option.group_id, loud_sound: @stage_common_option.loud_sound, own_equipment: @stage_common_option.own_equipment } }, as: :json end - assert_response 201 + assert_response :created end test 'should show stage_common_option' do @@ -29,7 +29,7 @@ class StageCommonOptionsControllerTest < ActionDispatch::IntegrationTest test 'should update stage_common_option' do patch stage_common_option_url(@stage_common_option), params: { stage_common_option: { bgm: @stage_common_option.bgm, camera_permission: @stage_common_option.camera_permission, group_id: @stage_common_option.group_id, loud_sound: @stage_common_option.loud_sound, own_equipment: @stage_common_option.own_equipment } }, as: :json - assert_response 200 + assert_response :ok end test 'should destroy stage_common_option' do @@ -37,6 +37,6 @@ class StageCommonOptionsControllerTest < ActionDispatch::IntegrationTest delete stage_common_option_url(@stage_common_option), as: :json end - assert_response 204 + assert_response :no_content end end diff --git a/api/test/controllers/stage_orders_controller_test.rb b/api/test/controllers/stage_orders_controller_test.rb index ee58727e7..49718edbc 100644 --- a/api/test/controllers/stage_orders_controller_test.rb +++ b/api/test/controllers/stage_orders_controller_test.rb @@ -18,7 +18,7 @@ class StageOrdersControllerTest < ActionDispatch::IntegrationTest params: { stage_order: { cleanup_end_time: @stage_order.cleanup_end_time, cleanup_time_interval: @stage_order.cleanup_time_interval, fes_date_id: @stage_order.fes_date_id, group_id: @stage_order.group_id, is_sunny: @stage_order.is_sunny, performance_end_time: @stage_order.performance_end_time, performance_start_time: @stage_order.performance_start_time, prepare_start_time: @stage_order.prepare_start_time, prepare_time_interval: @stage_order.prepare_time_interval, stage_first: @stage_order.stage_first, stage_second: @stage_order.stage_second, use_time_interval: @stage_order.use_time_interval } }, as: :json end - assert_response 201 + assert_response :created end test 'should show stage_order' do @@ -29,7 +29,7 @@ class StageOrdersControllerTest < ActionDispatch::IntegrationTest test 'should update stage_order' do patch stage_order_url(@stage_order), params: { stage_order: { cleanup_end_time: @stage_order.cleanup_end_time, cleanup_time_interval: @stage_order.cleanup_time_interval, fes_date_id: @stage_order.fes_date_id, group_id: @stage_order.group_id, is_sunny: @stage_order.is_sunny, performance_end_time: @stage_order.performance_end_time, performance_start_time: @stage_order.performance_start_time, prepare_start_time: @stage_order.prepare_start_time, prepare_time_interval: @stage_order.prepare_time_interval, stage_first: @stage_order.stage_first, stage_second: @stage_order.stage_second, use_time_interval: @stage_order.use_time_interval } }, as: :json - assert_response 200 + assert_response :ok end test 'should destroy stage_order' do @@ -37,6 +37,6 @@ class StageOrdersControllerTest < ActionDispatch::IntegrationTest delete stage_order_url(@stage_order), as: :json end - assert_response 204 + assert_response :no_content end end diff --git a/api/test/controllers/stocker_items_controller_test.rb b/api/test/controllers/stocker_items_controller_test.rb index 6669d5278..d71d5509a 100644 --- a/api/test/controllers/stocker_items_controller_test.rb +++ b/api/test/controllers/stocker_items_controller_test.rb @@ -18,7 +18,7 @@ class StockerItemsControllerTest < ActionDispatch::IntegrationTest params: { stocker_item: { fes_year_id: @stocker_item.fes_year_id, num: @stocker_item.num, rental_item_id: @stocker_item.rental_item_id, stocker_place_id: @stocker_item.stocker_place_id } }, as: :json end - assert_response 201 + assert_response :created end test 'should show stocker_item' do @@ -29,7 +29,7 @@ class StockerItemsControllerTest < ActionDispatch::IntegrationTest test 'should update stocker_item' do patch stocker_item_url(@stocker_item), params: { stocker_item: { fes_year_id: @stocker_item.fes_year_id, num: @stocker_item.num, rental_item_id: @stocker_item.rental_item_id, stocker_place_id: @stocker_item.stocker_place_id } }, as: :json - assert_response 200 + assert_response :ok end test 'should destroy stocker_item' do @@ -37,6 +37,6 @@ class StockerItemsControllerTest < ActionDispatch::IntegrationTest delete stocker_item_url(@stocker_item), as: :json end - assert_response 204 + assert_response :no_content end end diff --git a/api/test/controllers/sub_reps_controller_test.rb b/api/test/controllers/sub_reps_controller_test.rb index 1c83b6524..192d0928c 100644 --- a/api/test/controllers/sub_reps_controller_test.rb +++ b/api/test/controllers/sub_reps_controller_test.rb @@ -18,7 +18,7 @@ class SubRepsControllerTest < ActionDispatch::IntegrationTest params: { sub_rep: { department_id: @sub_rep.department_id, email: @sub_rep.email, grade_id: @sub_rep.grade_id, group_id: @sub_rep.group_id, name: @sub_rep.name, tel: @sub_rep.tel } }, as: :json end - assert_response 201 + assert_response :created end test 'should show sub_rep' do @@ -29,7 +29,7 @@ class SubRepsControllerTest < ActionDispatch::IntegrationTest test 'should update sub_rep' do patch sub_rep_url(@sub_rep), params: { sub_rep: { department_id: @sub_rep.department_id, email: @sub_rep.email, grade_id: @sub_rep.grade_id, group_id: @sub_rep.group_id, name: @sub_rep.name, tel: @sub_rep.tel } }, as: :json - assert_response 200 + assert_response :ok end test 'should destroy sub_rep' do @@ -37,6 +37,6 @@ class SubRepsControllerTest < ActionDispatch::IntegrationTest delete sub_rep_url(@sub_rep), as: :json end - assert_response 204 + assert_response :no_content end end diff --git a/api/test/controllers/user_details_controller_test.rb b/api/test/controllers/user_details_controller_test.rb index 3751588fd..79a2f803f 100644 --- a/api/test/controllers/user_details_controller_test.rb +++ b/api/test/controllers/user_details_controller_test.rb @@ -18,7 +18,7 @@ class UserDetailsControllerTest < ActionDispatch::IntegrationTest params: { user_detail: { department_id: @user_detail.department_id, grade_id: @user_detail.grade_id, tel: @user_detail.tel, user_id: @user_detail.user_id } }, as: :json end - assert_response 201 + assert_response :created end test 'should show user_detail' do @@ -29,7 +29,7 @@ class UserDetailsControllerTest < ActionDispatch::IntegrationTest test 'should update user_detail' do patch user_detail_url(@user_detail), params: { user_detail: { department_id: @user_detail.department_id, grade_id: @user_detail.grade_id, tel: @user_detail.tel, user_id: @user_detail.user_id } }, as: :json - assert_response 200 + assert_response :ok end test 'should destroy user_detail' do @@ -37,6 +37,6 @@ class UserDetailsControllerTest < ActionDispatch::IntegrationTest delete user_detail_url(@user_detail), as: :json end - assert_response 204 + assert_response :no_content end end diff --git a/api/test/controllers/user_page_settings_controller_test.rb b/api/test/controllers/user_page_settings_controller_test.rb index 1552bdfde..1336954ba 100644 --- a/api/test/controllers/user_page_settings_controller_test.rb +++ b/api/test/controllers/user_page_settings_controller_test.rb @@ -18,7 +18,7 @@ class UserPageSettingsControllerTest < ActionDispatch::IntegrationTest params: { user_page_setting: { is_edit_employee: @user_page_setting.is_edit_employee, is_edit_food_product: @user_page_setting.is_edit_food_product, is_edit_group: @user_page_setting.is_edit_group, is_edit_place: @user_page_setting.is_edit_place, is_edit_power_order: @user_page_setting.is_edit_power_order, is_edit_purchase_list: @user_page_setting.is_edit_purchase_list, is_edit_rental_order: @user_page_setting.is_edit_rental_order, is_edit_stage_order: @user_page_setting.is_edit_stage_order, is_edit_sub_rep: @user_page_setting.is_edit_sub_rep, is_regist_food_product: @user_page_setting.is_regist_food_product, is_regist_group: @user_page_setting.is_regist_group } }, as: :json end - assert_response 201 + assert_response :created end test 'should show user_page_setting' do @@ -29,7 +29,7 @@ class UserPageSettingsControllerTest < ActionDispatch::IntegrationTest test 'should update user_page_setting' do patch user_page_setting_url(@user_page_setting), params: { user_page_setting: { is_edit_employee: @user_page_setting.is_edit_employee, is_edit_food_product: @user_page_setting.is_edit_food_product, is_edit_group: @user_page_setting.is_edit_group, is_edit_place: @user_page_setting.is_edit_place, is_edit_power_order: @user_page_setting.is_edit_power_order, is_edit_purchase_list: @user_page_setting.is_edit_purchase_list, is_edit_rental_order: @user_page_setting.is_edit_rental_order, is_edit_stage_order: @user_page_setting.is_edit_stage_order, is_edit_sub_rep: @user_page_setting.is_edit_sub_rep, is_regist_food_product: @user_page_setting.is_regist_food_product, is_regist_group: @user_page_setting.is_regist_group } }, as: :json - assert_response 200 + assert_response :ok end test 'should destroy user_page_setting' do @@ -37,6 +37,6 @@ class UserPageSettingsControllerTest < ActionDispatch::IntegrationTest delete user_page_setting_url(@user_page_setting), as: :json end - assert_response 204 + assert_response :no_content end end From 5331b1b6279d2055825121577078437f3c482210 Mon Sep 17 00:00:00 2001 From: nose221834 Date: Sun, 20 Apr 2025 17:21:17 +0900 Subject: [PATCH 008/285] =?UTF-8?q?feat:=20=E3=82=B3=E3=83=A1=E3=83=B3?= =?UTF-8?q?=E3=83=88=E3=82=A2=E3=82=A6=E3=83=88=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/.rubocop.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/api/.rubocop.yml b/api/.rubocop.yml index c4f1a0406..46edd1451 100644 --- a/api/.rubocop.yml +++ b/api/.rubocop.yml @@ -22,7 +22,6 @@ AllCops: TargetRubyVersion: 3.0 Exclude: - 'vendor/**/*' - # - 'db/**/*' - 'lib/tasks/**/*' - "db/schema.rb" - 'bin/*' @@ -37,11 +36,14 @@ AllCops: - 'openapi/**/*' NewCops: enable -## sider's rubocop stops during this file +# 解説するコメントを書いて + +# HTTP ステータスコードを使用する際に、Rails の定数を使用することを推奨します。 Rails/HttpStatus: Exclude: - 'app/controllers/application_controller.rb' +# Rails のバージョンを指定することで、Rails のバージョンに依存しないコードを書くことを推奨します。 Rails/SkipsModelValidations: AllowedMethods: - 'touch' From e24dd931d2437af351bcfa3c60c4cf8d1c7f9e3d Mon Sep 17 00:00:00 2001 From: Kubosaka Date: Thu, 24 Apr 2025 02:07:32 +0900 Subject: [PATCH 009/285] =?UTF-8?q?rails=E3=82=A2=E3=83=83=E3=83=97?= =?UTF-8?q?=E3=83=87=E3=83=BC=E3=83=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/Gemfile | 2 +- api/Gemfile.lock | 368 ++++++++++++++++++++++++++--------------------- 2 files changed, 207 insertions(+), 163 deletions(-) diff --git a/api/Gemfile b/api/Gemfile index 4f5ddf3ac..82e34e707 100644 --- a/api/Gemfile +++ b/api/Gemfile @@ -4,7 +4,7 @@ git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby '3.0.7' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' -gem 'rails', '~> 6.1.3.1' +gem 'rails', '~> 7.1' # Use mysql as the database for Active Record gem 'mysql2', '>= 0.4.4' # Use Puma as the app server diff --git a/api/Gemfile.lock b/api/Gemfile.lock index 3ea2150f5..63ff2bb2c 100644 --- a/api/Gemfile.lock +++ b/api/Gemfile.lock @@ -1,155 +1,193 @@ GEM remote: https://rubygems.org/ specs: - actioncable (6.1.3.1) - actionpack (= 6.1.3.1) - activesupport (= 6.1.3.1) + actioncable (7.1.5.1) + actionpack (= 7.1.5.1) + activesupport (= 7.1.5.1) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailbox (6.1.3.1) - actionpack (= 6.1.3.1) - activejob (= 6.1.3.1) - activerecord (= 6.1.3.1) - activestorage (= 6.1.3.1) - activesupport (= 6.1.3.1) + zeitwerk (~> 2.6) + actionmailbox (7.1.5.1) + actionpack (= 7.1.5.1) + activejob (= 7.1.5.1) + activerecord (= 7.1.5.1) + activestorage (= 7.1.5.1) + activesupport (= 7.1.5.1) mail (>= 2.7.1) - actionmailer (6.1.3.1) - actionpack (= 6.1.3.1) - actionview (= 6.1.3.1) - activejob (= 6.1.3.1) - activesupport (= 6.1.3.1) + net-imap + net-pop + net-smtp + actionmailer (7.1.5.1) + actionpack (= 7.1.5.1) + actionview (= 7.1.5.1) + activejob (= 7.1.5.1) + activesupport (= 7.1.5.1) mail (~> 2.5, >= 2.5.4) - rails-dom-testing (~> 2.0) - actionpack (6.1.3.1) - actionview (= 6.1.3.1) - activesupport (= 6.1.3.1) - rack (~> 2.0, >= 2.0.9) + net-imap + net-pop + net-smtp + rails-dom-testing (~> 2.2) + actionpack (7.1.5.1) + actionview (= 7.1.5.1) + activesupport (= 7.1.5.1) + nokogiri (>= 1.8.5) + racc + rack (>= 2.2.4) + rack-session (>= 1.0.1) rack-test (>= 0.6.3) - rails-dom-testing (~> 2.0) - rails-html-sanitizer (~> 1.0, >= 1.2.0) - actiontext (6.1.3.1) - actionpack (= 6.1.3.1) - activerecord (= 6.1.3.1) - activestorage (= 6.1.3.1) - activesupport (= 6.1.3.1) + rails-dom-testing (~> 2.2) + rails-html-sanitizer (~> 1.6) + actiontext (7.1.5.1) + actionpack (= 7.1.5.1) + activerecord (= 7.1.5.1) + activestorage (= 7.1.5.1) + activesupport (= 7.1.5.1) + globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (6.1.3.1) - activesupport (= 6.1.3.1) + actionview (7.1.5.1) + activesupport (= 7.1.5.1) builder (~> 3.1) - erubi (~> 1.4) - rails-dom-testing (~> 2.0) - rails-html-sanitizer (~> 1.1, >= 1.2.0) - activejob (6.1.3.1) - activesupport (= 6.1.3.1) + erubi (~> 1.11) + rails-dom-testing (~> 2.2) + rails-html-sanitizer (~> 1.6) + activejob (7.1.5.1) + activesupport (= 7.1.5.1) globalid (>= 0.3.6) - activemodel (6.1.3.1) - activesupport (= 6.1.3.1) - activerecord (6.1.3.1) - activemodel (= 6.1.3.1) - activesupport (= 6.1.3.1) - activestorage (6.1.3.1) - actionpack (= 6.1.3.1) - activejob (= 6.1.3.1) - activerecord (= 6.1.3.1) - activesupport (= 6.1.3.1) - marcel (~> 1.0.0) - mini_mime (~> 1.0.2) - activesupport (6.1.3.1) + activemodel (7.1.5.1) + activesupport (= 7.1.5.1) + activerecord (7.1.5.1) + activemodel (= 7.1.5.1) + activesupport (= 7.1.5.1) + timeout (>= 0.4.0) + activestorage (7.1.5.1) + actionpack (= 7.1.5.1) + activejob (= 7.1.5.1) + activerecord (= 7.1.5.1) + activesupport (= 7.1.5.1) + marcel (~> 1.0) + activesupport (7.1.5.1) + base64 + benchmark (>= 0.3) + bigdecimal concurrent-ruby (~> 1.0, >= 1.0.2) + connection_pool (>= 2.2.5) + drb i18n (>= 1.6, < 2) + logger (>= 1.4.2) minitest (>= 5.1) + mutex_m + securerandom (>= 0.3) tzinfo (~> 2.0) - zeitwerk (~> 2.3) base64 (0.2.0) - bcrypt (3.1.16) + bcrypt (3.1.20) + benchmark (0.4.0) + bigdecimal (3.1.9) bootsnap (1.18.4) msgpack (~> 1.2) - builder (3.2.4) + builder (3.3.0) byebug (11.1.3) - concurrent-ruby (1.1.8) + concurrent-ruby (1.3.5) + connection_pool (2.5.2) crass (1.0.6) - devise (4.7.3) + date (3.4.1) + devise (4.9.4) bcrypt (~> 3.0) orm_adapter (~> 0.1) railties (>= 4.1.0) responders warden (~> 1.2.3) - devise_token_auth (1.1.5) + devise_token_auth (1.2.5) bcrypt (~> 3.0) devise (> 3.5.2, < 5) - rails (>= 4.2.0, < 6.2) + rails (>= 4.2.0, < 8.1) docker-api (2.4.0) excon (>= 0.64.0) multi_json - dotenv (2.7.6) - dotenv-rails (2.7.6) - dotenv (= 2.7.6) - railties (>= 3.2) + dotenv (3.1.8) + dotenv-rails (3.1.8) + dotenv (= 3.1.8) + railties (>= 6.1) + drb (2.2.1) easy_diff (1.0.0) - erubi (1.10.0) + erubi (1.13.1) eventmachine (1.2.7) excon (1.2.5) logger - faraday (1.10.0) - faraday-em_http (~> 1.0) - faraday-em_synchrony (~> 1.0) - faraday-excon (~> 1.1) - faraday-httpclient (~> 1.0) - faraday-multipart (~> 1.0) - faraday-net_http (~> 1.0) - faraday-net_http_persistent (~> 1.0) - faraday-patron (~> 1.0) - faraday-rack (~> 1.0) - faraday-retry (~> 1.0) - ruby2_keywords (>= 0.0.4) - faraday-em_http (1.0.0) - faraday-em_synchrony (1.0.0) - faraday-excon (1.1.0) - faraday-httpclient (1.0.1) - faraday-multipart (1.0.3) - multipart-post (>= 1.2, < 3) - faraday-net_http (1.0.1) - faraday-net_http_persistent (1.2.0) - faraday-patron (1.0.0) - faraday-rack (1.0.0) - faraday-retry (1.0.3) - faraday_middleware (1.2.0) - faraday (~> 1.0) - ffi (1.15.0) - gli (2.21.0) - globalid (0.4.2) - activesupport (>= 4.2.0) + faraday (2.13.0) + faraday-net_http (>= 2.0, < 3.5) + json + logger + faraday-mashify (1.0.0) + faraday (~> 2.0) + hashie + faraday-multipart (1.1.0) + multipart-post (~> 2.0) + faraday-net_http (3.4.0) + net-http (>= 0.5.0) + ffi (1.17.2) + gli (2.22.2) + ostruct + globalid (1.2.1) + activesupport (>= 6.1) hashie (5.0.0) - i18n (1.8.10) + i18n (1.14.7) concurrent-ruby (~> 1.0) - jbuilder (2.11.2) + io-console (0.8.0) + irb (1.15.2) + pp (>= 0.6.0) + rdoc (>= 4.0.0) + reline (>= 0.4.2) + jbuilder (2.13.0) + actionview (>= 5.0.0) activesupport (>= 5.0.0) + json (2.10.2) key_flatten (1.0.0) - listen (3.5.1) + listen (3.9.0) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) - logger (1.6.6) - loofah (2.9.1) + logger (1.7.0) + loofah (2.24.0) crass (~> 1.0.2) - nokogiri (>= 1.5.9) - mail (2.7.1) + nokogiri (>= 1.12.0) + mail (2.8.1) mini_mime (>= 0.1.1) - marcel (1.0.1) - method_source (1.0.0) - mini_mime (1.0.3) - mini_portile2 (2.5.0) - minitest (5.14.4) + net-imap + net-pop + net-smtp + marcel (1.0.4) + mini_mime (1.1.5) + mini_portile2 (2.8.8) + minitest (5.25.5) msgpack (1.8.0) multi_json (1.15.0) - multipart-post (2.1.1) - mysql2 (0.5.3) - nio4r (2.5.7) - nokogiri (1.11.3) - mini_portile2 (~> 2.5.0) + multipart-post (2.4.1) + mutex_m (0.3.0) + mysql2 (0.5.6) + net-http (0.6.0) + uri + net-imap (0.4.20) + date + net-protocol + net-pop (0.1.2) + net-protocol + net-protocol (0.2.2) + timeout + net-smtp (0.5.1) + net-protocol + nio4r (2.7.4) + nokogiri (1.17.2) + mini_portile2 (~> 2.8.2) racc (~> 1.4) orm_adapter (0.5.0) - pdfkit (0.8.5) - puma (4.3.7) + ostruct (0.6.1) + pdfkit (0.8.7.3) + pp (0.6.2) + prettyprint + prettyprint (0.2.0) + psych (5.2.3) + date + stringio + puma (4.3.12) nio4r (~> 2.0) r2-oas (0.5.0) docker-api (>= 1.34.2) @@ -158,49 +196,61 @@ GEM key_flatten (>= 1.0.0) railties (>= 4.2.5) watir (>= 6.16.5) - racc (1.5.2) - rack (2.2.3) - rack-cors (1.1.1) + racc (1.8.1) + rack (3.1.13) + rack-cors (2.0.2) rack (>= 2.0.0) - rack-test (1.1.0) - rack (>= 1.0, < 3) - rails (6.1.3.1) - actioncable (= 6.1.3.1) - actionmailbox (= 6.1.3.1) - actionmailer (= 6.1.3.1) - actionpack (= 6.1.3.1) - actiontext (= 6.1.3.1) - actionview (= 6.1.3.1) - activejob (= 6.1.3.1) - activemodel (= 6.1.3.1) - activerecord (= 6.1.3.1) - activestorage (= 6.1.3.1) - activesupport (= 6.1.3.1) + rack-session (2.1.0) + base64 (>= 0.1.0) + rack (>= 3.0.0) + rack-test (2.2.0) + rack (>= 1.3) + rackup (2.2.1) + rack (>= 3) + rails (7.1.5.1) + actioncable (= 7.1.5.1) + actionmailbox (= 7.1.5.1) + actionmailer (= 7.1.5.1) + actionpack (= 7.1.5.1) + actiontext (= 7.1.5.1) + actionview (= 7.1.5.1) + activejob (= 7.1.5.1) + activemodel (= 7.1.5.1) + activerecord (= 7.1.5.1) + activestorage (= 7.1.5.1) + activesupport (= 7.1.5.1) bundler (>= 1.15.0) - railties (= 6.1.3.1) - sprockets-rails (>= 2.0.0) - rails-dom-testing (2.0.3) - activesupport (>= 4.2.0) + railties (= 7.1.5.1) + rails-dom-testing (2.2.0) + activesupport (>= 5.0.0) + minitest nokogiri (>= 1.6) - rails-html-sanitizer (1.3.0) - loofah (~> 2.3) - railties (6.1.3.1) - actionpack (= 6.1.3.1) - activesupport (= 6.1.3.1) - method_source - rake (>= 0.8.7) - thor (~> 1.0) - rake (13.0.3) - rb-fsevent (0.10.4) - rb-inotify (0.10.1) + rails-html-sanitizer (1.6.2) + loofah (~> 2.21) + nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0) + railties (7.1.5.1) + actionpack (= 7.1.5.1) + activesupport (= 7.1.5.1) + irb + rackup (>= 1.0.0) + rake (>= 12.2) + thor (~> 1.0, >= 1.2.2) + zeitwerk (~> 2.6) + rake (13.2.1) + rb-fsevent (0.11.2) + rb-inotify (0.11.1) ffi (~> 1.0) + rdoc (6.13.1) + psych (>= 4.0.0) regexp_parser (2.10.0) - responders (3.0.1) - actionpack (>= 5.0) - railties (>= 5.0) + reline (0.6.1) + io-console (~> 0.5) + responders (3.1.1) + actionpack (>= 5.2) + railties (>= 5.2) rexml (3.4.1) - ruby2_keywords (0.0.5) rubyzip (2.4.1) + securerandom (0.3.2) seed-fu (2.3.9) activerecord (>= 3.1) activesupport (>= 3.1) @@ -211,38 +261,34 @@ GEM rubyzip (>= 1.2.2, < 3.0) websocket (~> 1.0) slack-notifier (2.4.0) - slack-ruby-client (1.0.0) - faraday (>= 1.0) - faraday_middleware + slack-ruby-client (2.5.2) + faraday (>= 2.0) + faraday-mashify + faraday-multipart gli hashie - websocket-driver + logger spring (2.1.1) spring-watcher-listen (2.0.1) listen (>= 2.7, < 4.0) spring (>= 1.2, < 3.0) - sprockets (4.0.2) - concurrent-ruby (~> 1.0) - rack (> 1, < 3) - sprockets-rails (3.2.2) - actionpack (>= 4.0) - activesupport (>= 4.0) - sprockets (>= 3.0.0) - thor (1.1.0) - tzinfo (2.0.4) + stringio (3.1.7) + thor (1.3.2) + timeout (0.4.3) + tzinfo (2.0.6) concurrent-ruby (~> 1.0) + uri (1.0.3) warden (1.2.9) rack (>= 2.0.9) watir (7.3.0) regexp_parser (>= 1.2, < 3) selenium-webdriver (~> 4.2) websocket (1.2.11) - websocket-driver (0.7.3) + websocket-driver (0.7.7) + base64 websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) - wkhtmltopdf (0.1.2) - wkhtmltopdf-binary (0.12.6.8) - zeitwerk (2.4.2) + zeitwerk (2.6.18) PLATFORMS ruby @@ -260,15 +306,13 @@ DEPENDENCIES puma (~> 4.1) r2-oas rack-cors - rails (~> 6.1.3.1) + rails (~> 7.1) seed-fu slack-notifier slack-ruby-client spring spring-watcher-listen (~> 2.0.0) tzinfo-data - wkhtmltopdf - wkhtmltopdf-binary RUBY VERSION ruby 3.0.7p220 From a7abd25e060b24c65ce890fa90a56bdadf05aea8 Mon Sep 17 00:00:00 2001 From: hikahana <22.h.hanada.nutfes@gmail.com> Date: Thu, 22 May 2025 18:42:21 +0900 Subject: [PATCH 010/285] =?UTF-8?q?feat:=20=E3=82=B0=E3=83=AB=E3=83=BC?= =?UTF-8?q?=E3=83=97ID=E3=81=AB=E3=82=88=E3=82=8B=E6=96=99=E7=90=86?= =?UTF-8?q?=E3=83=97=E3=83=AD=E3=82=BB=E3=82=B9=E6=B3=A8=E6=96=87=E3=81=AE?= =?UTF-8?q?=E5=8F=96=E5=BE=97=E6=A9=9F=E8=83=BD=E3=82=92=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?\?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/app/controllers/cooking_process_orders_controller.rb | 9 +++++++++ api/config/routes.rb | 6 +++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/api/app/controllers/cooking_process_orders_controller.rb b/api/app/controllers/cooking_process_orders_controller.rb index 02623d39a..95a7ef7cb 100644 --- a/api/app/controllers/cooking_process_orders_controller.rb +++ b/api/app/controllers/cooking_process_orders_controller.rb @@ -12,6 +12,15 @@ def show render json: @cooking_process_order end + # GET /cooking_process_orders/group/:group_id + def get_by_group_id + if @cooking_process_orders + render json: fmt(ok, @cooking_process_orders) + else + render json: fmt(not_found, [], "Not found cooking_process_orders = "+params[:group_id]) + end + end + # POST /cooking_process_orders def create @cooking_process_order = CookingProcessOrder.new(cooking_process_order_params) diff --git a/api/config/routes.rb b/api/config/routes.rb index 9300d3368..212bd1468 100644 --- a/api/config/routes.rb +++ b/api/config/routes.rb @@ -102,7 +102,11 @@ end resources :venue_maps resources :announcements - resources :cooking_process_orders + resources :cooking_process_orders do + collection do + get 'group/:group_id', to: 'cooking_process_orders#get_by_group_id' + end + end resources :contact_persons resources :un_registered_groups do collection do From f1f190988c12481b57d4ee2b58d4c36df0946b0f Mon Sep 17 00:00:00 2001 From: hikahana <22.h.hanada.nutfes@gmail.com> Date: Thu, 22 May 2025 18:42:29 +0900 Subject: [PATCH 011/285] =?UTF-8?q?feat:=20=E6=96=99=E7=90=86=E3=83=97?= =?UTF-8?q?=E3=83=AD=E3=82=BB=E3=82=B9=E6=B3=A8=E6=96=87=E3=82=92=E5=8F=96?= =?UTF-8?q?=E5=BE=97=E3=81=99=E3=82=8BAPI=E3=83=95=E3=83=83=E3=82=AF?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- user/src/api/cookingProcessOrderApi.ts | 40 ++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 user/src/api/cookingProcessOrderApi.ts diff --git a/user/src/api/cookingProcessOrderApi.ts b/user/src/api/cookingProcessOrderApi.ts new file mode 100644 index 000000000..a770acc58 --- /dev/null +++ b/user/src/api/cookingProcessOrderApi.ts @@ -0,0 +1,40 @@ +import { useApiGet } from '@/hooks/useApi'; + +export type CookingProcessOrder = { + group_id: number; + created_at: string; + updated_at: string; + pre_open_kitchen: boolean; + during_open_kitchen: boolean; + tent?: string | null; +}; + +export type ApiStatus = { + code: number; + message: string; +}; + +export type ApiResponse = { + status: ApiStatus; + data: T; +}; + +const API_ENDPOINTS = { + CHECK_ALL_REGISTERED: '/cooking_process_orders', +}; + +export const useGetCheckAllRegisteredGroups = (groupId: number | undefined) => { + const endpoint = `${API_ENDPOINTS.CHECK_ALL_REGISTERED}/${groupId}`; + + const { data, error, isLoading, mutate } = + useApiGet>(endpoint); + + const cookingProcessOrders = data?.data ?? undefined; + + return { + cookingProcessOrders, + isLoading, + error, + mutateCookingProcessOrders: mutate, + }; +}; From 876fe1e637544eadfa82d568a2bd2559afe6c63e Mon Sep 17 00:00:00 2001 From: hikahana <22.h.hanada.nutfes@gmail.com> Date: Thu, 22 May 2025 18:43:09 +0900 Subject: [PATCH 012/285] =?UTF-8?q?feat:=20oas=E8=87=AA=E5=8B=95=E7=94=9F?= =?UTF-8?q?=E6=88=90=E3=80=82cookig=5Fprocess=5Forder/group/:group=5Fid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/oas_docs/.docs | Bin 61609 -> 61647 bytes api/oas_docs/dist/oas_doc.yml | 29 ++++++++++++++++++ .../src/paths/cooking_process_order.yml | 29 ++++++++++++++++++ 3 files changed, 58 insertions(+) diff --git a/api/oas_docs/.docs b/api/oas_docs/.docs index e3ddb88bb2d05e3ee5e6b860b9c0290e7809694e..efac65de05bef49821dcf9b39dc63d7285cfb9d7 100644 GIT binary patch delta 44349 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 delta 44300 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�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 Q3~}$lnGPTS51Rt Date: Fri, 23 May 2025 19:00:54 +0900 Subject: [PATCH 013/285] =?UTF-8?q?feat:=20post,put=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- user/src/api/cookingProcessOrderApi.ts | 40 +++++++++++++++++++------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/user/src/api/cookingProcessOrderApi.ts b/user/src/api/cookingProcessOrderApi.ts index a770acc58..3400a043a 100644 --- a/user/src/api/cookingProcessOrderApi.ts +++ b/user/src/api/cookingProcessOrderApi.ts @@ -1,11 +1,15 @@ -import { useApiGet } from '@/hooks/useApi'; +import { useSession } from 'next-auth/react'; +import useSWRMutation from 'swr/mutation'; +import { useAuthenticatedGet } from '@/hooks/useApi'; +import { authenticatedPatchFetcher, authenticatedPostFetcher } from './api'; export type CookingProcessOrder = { - group_id: number; - created_at: string; - updated_at: string; - pre_open_kitchen: boolean; - during_open_kitchen: boolean; + id: number; + groupId: number; + createdAt: string; + updatedAt: string; + preOpenKitchen: boolean; + duringOpenKitchen: boolean; tent?: string | null; }; @@ -20,14 +24,14 @@ export type ApiResponse = { }; const API_ENDPOINTS = { - CHECK_ALL_REGISTERED: '/cooking_process_orders', + COOKING_PROCESS_ORDER: '/cooking_process_orders', }; -export const useGetCheckAllRegisteredGroups = (groupId: number | undefined) => { - const endpoint = `${API_ENDPOINTS.CHECK_ALL_REGISTERED}/${groupId}`; +export const useGetCookingProcessOrder = (groupId: number | undefined) => { + const endpoint = `${API_ENDPOINTS.COOKING_PROCESS_ORDER}/${groupId}`; const { data, error, isLoading, mutate } = - useApiGet>(endpoint); + useAuthenticatedGet>(endpoint); const cookingProcessOrders = data?.data ?? undefined; @@ -38,3 +42,19 @@ export const useGetCheckAllRegisteredGroups = (groupId: number | undefined) => { mutateCookingProcessOrders: mutate, }; }; + +export const usePostCookingProcessOrder = () => { + const { data: session } = useSession(); + return useSWRMutation( + session ? [API_ENDPOINTS.COOKING_PROCESS_ORDER, session] : null, + authenticatedPostFetcher + ); +}; + +export const useUpdateCookingProcessOrder = (id: number) => { + const { data: session } = useSession(); + return useSWRMutation( + session ? [`${API_ENDPOINTS.COOKING_PROCESS_ORDER}/${id}`, session] : null, + authenticatedPatchFetcher + ); +}; From bad7283a7389190d66834aa96089e9f7fab8db71 Mon Sep 17 00:00:00 2001 From: hikahana <22.h.hanada.nutfes@gmail.com> Date: Fri, 23 May 2025 19:16:39 +0900 Subject: [PATCH 014/285] refactor: replace useSWRMutation with direct fetcher calls in cookingProcessOrderApi --- user/src/api/cookingProcessOrderApi.ts | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/user/src/api/cookingProcessOrderApi.ts b/user/src/api/cookingProcessOrderApi.ts index 3400a043a..2054e2475 100644 --- a/user/src/api/cookingProcessOrderApi.ts +++ b/user/src/api/cookingProcessOrderApi.ts @@ -1,5 +1,4 @@ import { useSession } from 'next-auth/react'; -import useSWRMutation from 'swr/mutation'; import { useAuthenticatedGet } from '@/hooks/useApi'; import { authenticatedPatchFetcher, authenticatedPostFetcher } from './api'; @@ -45,16 +44,18 @@ export const useGetCookingProcessOrder = (groupId: number | undefined) => { export const usePostCookingProcessOrder = () => { const { data: session } = useSession(); - return useSWRMutation( - session ? [API_ENDPOINTS.COOKING_PROCESS_ORDER, session] : null, - authenticatedPostFetcher - ); + if (!session) return null; + return authenticatedPostFetcher([ + API_ENDPOINTS.COOKING_PROCESS_ORDER, + session, + ]); }; export const useUpdateCookingProcessOrder = (id: number) => { const { data: session } = useSession(); - return useSWRMutation( - session ? [`${API_ENDPOINTS.COOKING_PROCESS_ORDER}/${id}`, session] : null, - authenticatedPatchFetcher - ); + if (!session) return null; + return authenticatedPatchFetcher([ + `${API_ENDPOINTS.COOKING_PROCESS_ORDER}/${id}`, + session, + ]); }; From 254763e057cd54924e2885caff467b59ee09f4aa Mon Sep 17 00:00:00 2001 From: hikahana <22.h.hanada.nutfes@gmail.com> Date: Fri, 23 May 2025 19:21:55 +0900 Subject: [PATCH 015/285] feat: add new properties to CookingProcessOrder and update response type in cookingProcessOrderApi --- user/src/api/cookingProcessOrderApi.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/user/src/api/cookingProcessOrderApi.ts b/user/src/api/cookingProcessOrderApi.ts index 2054e2475..2a332dc95 100644 --- a/user/src/api/cookingProcessOrderApi.ts +++ b/user/src/api/cookingProcessOrderApi.ts @@ -3,6 +3,13 @@ import { useAuthenticatedGet } from '@/hooks/useApi'; import { authenticatedPatchFetcher, authenticatedPostFetcher } from './api'; export type CookingProcessOrder = { + groupId: number; + preOpenKitchen: boolean; + duringOpenKitchen: boolean; + tent?: string | null; +}; + +export type CookingProcessOrderResponse = { id: number; groupId: number; createdAt: string; @@ -30,7 +37,7 @@ export const useGetCookingProcessOrder = (groupId: number | undefined) => { const endpoint = `${API_ENDPOINTS.COOKING_PROCESS_ORDER}/${groupId}`; const { data, error, isLoading, mutate } = - useAuthenticatedGet>(endpoint); + useAuthenticatedGet>(endpoint); const cookingProcessOrders = data?.data ?? undefined; From c71319dcdc5fd63a03be3f015a8c51002f4b3bd0 Mon Sep 17 00:00:00 2001 From: hikahana <22.h.hanada.nutfes@gmail.com> Date: Fri, 23 May 2025 20:33:21 +0900 Subject: [PATCH 016/285] refactor: simplify API calls in cookingProcessOrderApi by using custom hooks --- user/src/api/cookingProcessOrderApi.ts | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/user/src/api/cookingProcessOrderApi.ts b/user/src/api/cookingProcessOrderApi.ts index 2a332dc95..c9fa822fd 100644 --- a/user/src/api/cookingProcessOrderApi.ts +++ b/user/src/api/cookingProcessOrderApi.ts @@ -1,6 +1,8 @@ -import { useSession } from 'next-auth/react'; -import { useAuthenticatedGet } from '@/hooks/useApi'; -import { authenticatedPatchFetcher, authenticatedPostFetcher } from './api'; +import { + useAuthenticatedGet, + useAuthenticatedPatch, + useAuthenticatedPost, +} from '@/hooks/useApi'; export type CookingProcessOrder = { groupId: number; @@ -50,19 +52,9 @@ export const useGetCookingProcessOrder = (groupId: number | undefined) => { }; export const usePostCookingProcessOrder = () => { - const { data: session } = useSession(); - if (!session) return null; - return authenticatedPostFetcher([ - API_ENDPOINTS.COOKING_PROCESS_ORDER, - session, - ]); + return useAuthenticatedPost(API_ENDPOINTS.COOKING_PROCESS_ORDER); }; export const useUpdateCookingProcessOrder = (id: number) => { - const { data: session } = useSession(); - if (!session) return null; - return authenticatedPatchFetcher([ - `${API_ENDPOINTS.COOKING_PROCESS_ORDER}/${id}`, - session, - ]); + return useAuthenticatedPatch(`${API_ENDPOINTS.COOKING_PROCESS_ORDER}/${id}`); }; From 89b799bb7214a1515322a69f4cac4b17d46f9d6b Mon Sep 17 00:00:00 2001 From: hikahana <22.h.hanada.nutfes@gmail.com> Date: Fri, 23 May 2025 20:59:04 +0900 Subject: [PATCH 017/285] Added email and password properties to the Session schema in the API documentation --- .../src/components/schemas/devisetokenauth/session.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/api/oas_docs/src/components/schemas/devisetokenauth/session.yml b/api/oas_docs/src/components/schemas/devisetokenauth/session.yml index 3e076928b..3a6995d3c 100644 --- a/api/oas_docs/src/components/schemas/devisetokenauth/session.yml +++ b/api/oas_docs/src/components/schemas/devisetokenauth/session.yml @@ -4,6 +4,9 @@ components: devisetokenauth.Session: type: object properties: - id: - type: integer - format: int64 + email: + type: string + description: nutfes-taro@email.com + password: + type: string + description: password From 79bd7d507e4be1746f116ef1b3b1abc36bf786dd Mon Sep 17 00:00:00 2001 From: hikahana <22.h.hanada.nutfes@gmail.com> Date: Fri, 23 May 2025 20:59:26 +0900 Subject: [PATCH 018/285] Add security schemes for ClientAuth, DeviseAuth, and UidAuth in API documentation --- .../src/components/securitySchemes/client_auth.yml | 8 ++++++++ .../src/components/securitySchemes/devise_auth.yml | 8 ++++++++ api/oas_docs/src/components/securitySchemes/uid_auth.yml | 8 ++++++++ 3 files changed, 24 insertions(+) create mode 100755 api/oas_docs/src/components/securitySchemes/client_auth.yml create mode 100755 api/oas_docs/src/components/securitySchemes/devise_auth.yml create mode 100755 api/oas_docs/src/components/securitySchemes/uid_auth.yml diff --git a/api/oas_docs/src/components/securitySchemes/client_auth.yml b/api/oas_docs/src/components/securitySchemes/client_auth.yml new file mode 100755 index 000000000..328106498 --- /dev/null +++ b/api/oas_docs/src/components/securitySchemes/client_auth.yml @@ -0,0 +1,8 @@ +--- +components: + securitySchemes: + ClientAuth: + type: apiKey + in: header + name: client + description: Devise認証用のクライアントID diff --git a/api/oas_docs/src/components/securitySchemes/devise_auth.yml b/api/oas_docs/src/components/securitySchemes/devise_auth.yml new file mode 100755 index 000000000..062d55c87 --- /dev/null +++ b/api/oas_docs/src/components/securitySchemes/devise_auth.yml @@ -0,0 +1,8 @@ +--- +components: + securitySchemes: + DeviseAuth: + type: apiKey + in: header + name: access-token + description: Devise認証用のアクセストークン diff --git a/api/oas_docs/src/components/securitySchemes/uid_auth.yml b/api/oas_docs/src/components/securitySchemes/uid_auth.yml new file mode 100755 index 000000000..3ff65b7e6 --- /dev/null +++ b/api/oas_docs/src/components/securitySchemes/uid_auth.yml @@ -0,0 +1,8 @@ +--- +components: + securitySchemes: + UidAuth: + type: apiKey + in: header + name: uid + description: Devise認証用のユーザーID From f52cf01771ebc64fc1c766b4ba8a78de85283500 Mon Sep 17 00:00:00 2001 From: hikahana <22.h.hanada.nutfes@gmail.com> Date: Fri, 23 May 2025 20:59:33 +0900 Subject: [PATCH 019/285] Update API documentation title to 'Group Manager API' and add security schemes for DeviseAuth, ClientAuth, and UidAuth --- api/oas_docs/dist/oas_doc.yml | 31 +++++++++++++++++++++++++++---- api/oas_docs/src/info.yml | 2 +- api/oas_docs/src/security.yml | 5 +++++ 3 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 api/oas_docs/src/security.yml diff --git a/api/oas_docs/dist/oas_doc.yml b/api/oas_docs/dist/oas_doc.yml index 8f43beab7..c38cbfc40 100644 --- a/api/oas_docs/dist/oas_doc.yml +++ b/api/oas_docs/dist/oas_doc.yml @@ -3,7 +3,7 @@ externalDocs: description: '' url: '' info: - title: OAS API Document Title + title: Group Manager API description: |- This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, @@ -18,6 +18,10 @@ info: url: '' version: 1.0.0 openapi: 3.0.0 +security: +- DeviseAuth: [] + ClientAuth: [] + UidAuth: [] servers: - url: http://localhost:3000 description: localhost @@ -10810,9 +10814,12 @@ components: devisetokenauth.Session: type: object properties: - id: - type: integer - format: int64 + email: + type: string + description: nutfes-taro@email.com + password: + type: string + description: password devisetokenauth.TokenValidation: type: object properties: @@ -11428,3 +11435,19 @@ components: application/json: schema: "$ref": "#/components/schemas/VenueMap" + securitySchemes: + ClientAuth: + type: apiKey + in: header + name: client + description: Devise認証用のクライアントID + DeviseAuth: + type: apiKey + in: header + name: access-token + description: Devise認証用のアクセストークン + UidAuth: + type: apiKey + in: header + name: uid + description: Devise認証用のユーザーID diff --git a/api/oas_docs/src/info.yml b/api/oas_docs/src/info.yml index 55b33ab5a..63839e472 100644 --- a/api/oas_docs/src/info.yml +++ b/api/oas_docs/src/info.yml @@ -1,6 +1,6 @@ --- info: - title: OAS API Document Title + title: Group Manager API description: |- This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, diff --git a/api/oas_docs/src/security.yml b/api/oas_docs/src/security.yml new file mode 100644 index 000000000..96a535952 --- /dev/null +++ b/api/oas_docs/src/security.yml @@ -0,0 +1,5 @@ +--- +security: +- DeviseAuth: [] + ClientAuth: [] + UidAuth: [] From 2d3668865e7e13cdf1901548c89cdfa257e82b88 Mon Sep 17 00:00:00 2001 From: hikahana <22.h.hanada.nutfes@gmail.com> Date: Fri, 23 May 2025 22:02:21 +0900 Subject: [PATCH 020/285] Implement bulk creation for food products with transaction handling --- .../controllers/food_products_controller.rb | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/api/app/controllers/food_products_controller.rb b/api/app/controllers/food_products_controller.rb index 5ae613045..51805a0a1 100644 --- a/api/app/controllers/food_products_controller.rb +++ b/api/app/controllers/food_products_controller.rb @@ -16,9 +16,18 @@ def show # POST /food_products # POST /food_products.json + # 複数件の作成も行う。配列で渡すことで複数件も可能。 def create - @food_product = FoodProduct.create(food_product_params) - render json: fmt(created, @food_product) + ActiveRecord::Base.transaction do + @food_products = FoodProduct.create(food_product_array_params) + + if @food_products.all?(&:persisted?) + render json: fmt(created, @food_products) + else + render json: fmt(not_found, [], "Not found food_product = ") + raise ActiveRecord::Rollback + end + end end # PATCH/PUT /food_products/1 @@ -49,4 +58,15 @@ def set_food_product def food_product_params params.permit(:group_id, :name, :is_cooking, :first_day_num, :second_day_num) end + + # Handle both single and bulk creation parameters + def food_product_array_params + if params[:food_products].present? + params.require(:food_products).map { |f| f.permit(:group_id, :name, :is_cooking, :first_day_num, :second_day_num) } + elsif params.is_a?(Array) + params.map { |f| f.permit(:group_id, :name, :is_cooking, :first_day_num, :second_day_num) } + else + [food_product_params] + end + end end From e7e10909a44861919c190e6c6d0316c4a1fd7bc2 Mon Sep 17 00:00:00 2001 From: hikahana <22.h.hanada.nutfes@gmail.com> Date: Fri, 23 May 2025 22:02:29 +0900 Subject: [PATCH 021/285] Add API hooks for managing food products including fetching, creating, and updating --- user/src/api/foodProdutApi.ts | 75 +++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 user/src/api/foodProdutApi.ts diff --git a/user/src/api/foodProdutApi.ts b/user/src/api/foodProdutApi.ts new file mode 100644 index 000000000..d076626d9 --- /dev/null +++ b/user/src/api/foodProdutApi.ts @@ -0,0 +1,75 @@ +import { + useAuthenticatedGet, + useAuthenticatedPatch, + useAuthenticatedPost, +} from '@/hooks/useApi'; + +export type FoodProduct = { + groupId: number; + name: string; + isCooking: boolean; + firstDayNum: number; + secondDayNum: number; +}; + +export type FoodProductResponse = { + id: number; + groupId: number; + name: string; + isCooking: boolean; + firstDayNum: number; + secondDayNum: number; + createdAt: string; + updatedAt: string; +}; + +// 一括作成用のリクエスト型 +export type CreateFoodProductsRequest = { + food_products: FoodProduct[]; +}; + +const API_ENDPOINTS = { + FOOD_PRODUCTS: '/food_products', +}; + +export const useGetFoodProducts = () => { + const endpoint = `${API_ENDPOINTS.FOOD_PRODUCTS}`; + const { data, error, isLoading, mutate } = + useAuthenticatedGet(endpoint); + + return { + foodProducts: data ?? [], + isLoading, + error, + mutateFoodProducts: mutate, + }; +}; + +export const useCreateFoodProducts = () => { + const endpoint = `${API_ENDPOINTS.FOOD_PRODUCTS}`; + const { trigger, isMutating, error } = useAuthenticatedPost(endpoint); + + const createFoodProducts = async (foodProducts: FoodProduct[]) => { + const request: CreateFoodProductsRequest = { + food_products: foodProducts, + }; + return trigger({ body: request }); + }; + + return { + createFoodProducts, + isMutating, + error, + }; +}; + +export const useUpdateFoodProducts = () => { + const endpoint = `${API_ENDPOINTS.FOOD_PRODUCTS}`; + const { trigger, isMutating, error } = useAuthenticatedPatch(endpoint); + + return { + trigger, + isMutating, + error, + }; +}; From 7836c90db9128e29e52eb28518c6612bfafd67e4 Mon Sep 17 00:00:00 2001 From: hikahana <22.h.hanada.nutfes@gmail.com> Date: Fri, 23 May 2025 22:27:20 +0900 Subject: [PATCH 022/285] Refactor food product update to support bulk updates with error handling and adjust routes accordingly --- .../controllers/food_products_controller.rb | 37 ++++++++++++++++--- api/config/routes.rb | 6 ++- 2 files changed, 36 insertions(+), 7 deletions(-) diff --git a/api/app/controllers/food_products_controller.rb b/api/app/controllers/food_products_controller.rb index 51805a0a1..bb16d1684 100644 --- a/api/app/controllers/food_products_controller.rb +++ b/api/app/controllers/food_products_controller.rb @@ -1,5 +1,5 @@ class FoodProductsController < ApplicationController - before_action :set_food_product, only: [:show, :update, :destroy] + before_action :set_food_product, only: [:show, :destroy] # GET /food_products # GET /food_products.json @@ -24,17 +24,42 @@ def create if @food_products.all?(&:persisted?) render json: fmt(created, @food_products) else - render json: fmt(not_found, [], "Not found food_product = ") + render json: fmt(not_found, [], "Not found food_products") raise ActiveRecord::Rollback end end end - # PATCH/PUT /food_products/1 - # PATCH/PUT /food_products/1.json + # PATCH/PUT /food_products + # PATCH/PUT /food_products.json def update - @food_product.update(food_product_params) - render json: fmt(created, @food_product, "Updated food_product id = "+params[:id]) + @food_products = [] + errors = [] + + ActiveRecord::Base.transaction do + params[:food_products].each do |food_product_data| + food_product = FoodProduct.find_by(id: food_product_data[:id]) + if food_product.nil? + errors << { id: food_product_data[:id], error: "Food product not found" } + next + end + + if food_product.update(food_product_data.permit(:group_id, :name, :is_cooking, :first_day_num, :second_day_num)) + @food_products << food_product + else + errors << { id: food_product_data[:id], errors: food_product.errors.full_messages } + end + end + + if errors.any? + render json: { status: 422, message: "Some updates failed", errors: errors }, status: :unprocessable_entity + raise ActiveRecord::Rollback + end + end + + if errors.empty? + render json: fmt(ok, @food_products, "Updated food_products") + end end # DELETE /food_products/1 diff --git a/api/config/routes.rb b/api/config/routes.rb index 9300d3368..db04ad3c5 100644 --- a/api/config/routes.rb +++ b/api/config/routes.rb @@ -39,7 +39,11 @@ resources :news resources :purchase_lists post "/purchase_lists" => "purchase_lists#create" - resources :food_products + resources :food_products do + collection do + patch '', to: 'food_products#update' + end + end resources :assign_rental_items resources :rentable_items resources :rental_items From 545d11b8b3c6e6f004588356873f5efbd59deaa9 Mon Sep 17 00:00:00 2001 From: hikahana <22.h.hanada.nutfes@gmail.com> Date: Fri, 23 May 2025 22:31:43 +0900 Subject: [PATCH 023/285] Add group food products endpoint and update routes for group-based retrieval --- api/app/controllers/food_products_controller.rb | 6 ++++++ api/config/routes.rb | 1 + 2 files changed, 7 insertions(+) diff --git a/api/app/controllers/food_products_controller.rb b/api/app/controllers/food_products_controller.rb index bb16d1684..e58bf015f 100644 --- a/api/app/controllers/food_products_controller.rb +++ b/api/app/controllers/food_products_controller.rb @@ -8,6 +8,12 @@ def index render json: fmt(ok, @food_products) end + # GET /group/:group_id/food_products + def group_food_products + @food_products = FoodProduct.where(group_id: params[:group_id]) + render json: fmt(ok, @food_products) + end + # GET /food_products/1 # GET /food_products/1.json def show diff --git a/api/config/routes.rb b/api/config/routes.rb index db04ad3c5..68dbbc51a 100644 --- a/api/config/routes.rb +++ b/api/config/routes.rb @@ -42,6 +42,7 @@ resources :food_products do collection do patch '', to: 'food_products#update' + get 'group/:group_id', to: 'food_products#group_food_products' end end resources :assign_rental_items From 1e7ff57ff78da68474d5c7f10b4aee8fc4bbe384 Mon Sep 17 00:00:00 2001 From: hikahana <22.h.hanada.nutfes@gmail.com> Date: Fri, 23 May 2025 22:31:50 +0900 Subject: [PATCH 024/285] Add patch and group retrieval endpoints for food products in API documentation --- api/oas_docs/.docs | Bin 61609 -> 61649 bytes api/oas_docs/dist/oas_doc.yml | 46 ++++++++++++++++++++++++ api/oas_docs/src/paths/food_product.yml | 46 ++++++++++++++++++++++++ 3 files changed, 92 insertions(+) diff --git a/api/oas_docs/.docs b/api/oas_docs/.docs index e3ddb88bb2d05e3ee5e6b860b9c0290e7809694e..49ba59cf9473e36c7989797cf8686639d5038995 100644 GIT binary patch delta 44442 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

# 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

_v6Mv-a8#Z-`npM|#pC*UWxx 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�!``eW+ zV}j>@NT6gkbfgkb@BNr@^<6^afY)2gPQ}4X`a7oQ%+Zp|FUUi5lvjSdhLf2yXK#r9 za4$9{S)QARHl^Ql@Y`Bkt$g*yYLHuRCx5E+Vfi}A>)b5)nQKk7q}Q}GNJ9_?e{v88 zu?WmzC`4lzM9>6?hA=50ER0|r{1>^k-Lh)QHy$4QUo(9eBAaJEwSV)zdc&~Qmkh49 z33VN$p-y#v_Lv~Ks$JT^g?v|ktKi4SVlgdS-QffGw)r@OW=(%>6(M)Z%HXjW2$-p8pR_bwlW4?by-ecGKt&O|C&c zaYimjE2ou2)g&evB^S*Jwi{*Ts;z9kWl$mer3Ib(Bu{4I6SweP(ptkE^)=gopqL!5 z_3HOEWM>(=-J1e>w-X@t;9| zgyNIPcdi!|3S*N_NYm(#pEev}eHe#M`F#9}k!W6O=fC%QJB zA0Q4`MsSc^1q6sCh@=IKf2AZqT1Wu100$8R-vYW8sCc3cnft9u|5=NcZ#z?Y>KwO! zP?a>ObMn)e^EGQqochHjzH2J}1P}oy^6J{dqWsjQ5zi5@@*!y+o z58a%%Dz@bW2z34}Ii)S;`yI4y)juO*4jX!lq=BUn1VeZX0!&oge@4nvAfFO60yruK zi6cURsR+JJf*tqUMgZvmlfNGwJ?~qYqVm>TR zr+C%9N>mJTEo9HV>FHFarZ?XBS;B73f7$(?d*1D25r1>U?uM|J z{UQQ0BkE4bG=@Hxa}NZcM8|}^_kzS1o z2nn2*BWMa@IRbbpLc$!NEWAXl-2mT(2&iq7(*OCB`0beFm~T!1J_!YBCDGJjrnTZ7 z=a83>T1ig4f5KTO?G&-(`!Z$h`t294J{v3deqP>~@d~@Fog+O?;nbrX2fHH^}(;ImLH(wp|()KdZQ=K($XN z%v@wPj0E9v8bJ|pT>^PPP9KYe)8EPBQ);2HWd6XvovtmIz2>Hiq9a4d_9 zbjR#nm%DlwZdq|E^3;qkuVka&QL#zA_r_!%C>XOP|F&{$p6)hd_DaW(K{3mYR^^`X zzM$mLe+79cCMOWmcm#L`;0-WLie+(1e{!PrjPJ_KerwFE%dAP3!H2yttq2H7GPe=~&^WXiJ$dn~ujOX^s23XEy>qiBHP0 zk5)Hy&z3l~)@$BPm^*3J()S%y!sLvUj6jR4$*;0YR>4~(R7 zQqm^!JN(Hf5zhZ^25H#8Bcs~Lo=dkjEB1Yw;R^T5u9)E5(${0xs~OlKAR`_3`q{6r zF-r3e+;vJ{ef=8aIlJnY7xrJ(O*3l1z$YVn47}((=!tDb=FOs~`mdUoIj^&=G4`9^ ze{)f>*HYlItRJpB^JbzpP%G7oF4ZK+sf+zaDWQ8FEeZeho|g3{kLDPR_P@He zuRmWArXCYLSnc5X-X|YVEZ@82b?V~$f7Qxs-mYG~_QO+`=6dqTIM(NO=7$d3T}-Bl zjtwCw#gaGz!4wE>FbWtwDZX{1c$Vg25~W}meBCDL4gEWCKcB%I`mMkrV*Gl5)e81r z=CmhOvBW%1{nNw)RavFF=1XP;%C{BfIcFM|PLe*7IExvlPdV z&@LXA{^d+h#k(cG;Y41q<@YQ*f8Uy+;xLZ5ci3Qz>Ft3VR%GwX?9ODpz zU|DeH+gzjnwt0{V_8Z8|3iBQKP2z^MzibL_f3TOy-+9&5?PRQ(;Zf~|b2SORW1@f) z14?q&|51M0ow!}=b&?16XV=bulHIjyK*2@Yp~P7IGP7a$dQF#T(YOk&ebukkUuhWb zHFe?FCePC$lleY{e;uuKO~v*|o(6IPMG*=Sr(AL1fMWs->0zb<%$ExS`~xEw|{*J+}@YT6(AB`;$4zo#(Si za>TyE`0BLQY4aOqM`7$A}`PS7BuGHtFioc|W?zwhNituX(&*cSitTUH!?t=#=Awgu}Km>&4nxQxA>F zkIWhA5PhJUFdCt090&1;6~q>76c&qU3=5G03(+i3!)>Y=_J0WZ-|fon;f8%T?GWIZ z^~^BC<(@z8MR1y5@hPXWgDECum*)&`aS5=)1>y1ix$NfQR24lf*T zIOz^L*yFkHsc~u1T0+5%?$&3oPwu>R<-=hP(XF-N?C{58{IT(}tjHRud&1aEY=OfF zaT~S31Lgq!;Nm`8MxaGn!O=7eaxQRN1~}_~f1$ekG1Q;*FtYgac%CI z4Ian0%~;Shrm0Zva$2w92fE%9pL$GyqE{@7{9GIUyzd4k=8MsNmwh*wZDqahTkI2y zf7mD@jyZ*48U$V*a0{^q2*VixoNb<@#A)$BFSlK9WcR1AXN8Cd+DBUK`KfvTeVQXX zbX}8oaLZ8SBG&_)<|D7FYs zfEf}TIN}fvEDs#{Z=Mu<$H_6FzHAT^!u>ovT@%^&(&|JYF5G|FX1tcCuH zp)o$reIAuS-0~Dqvvw+qGw*Iu?V6Yuqyul%@4cwZdzVIT)TxG;l`v#!fXek84D|cKNj8e;O%srjPNf7VguwoQ%Ae7tXAfIng@XcK9sI0Hv4* zAR1LftLUc4n>a~t#V8135J(_c1jrbK$~jO z%q8Ai_tkn5_o$(-CMjI~c%@|cocFhDD}x4k#qo4ip_0pn0Xw84Z4m=-i;#p{)z@-7aY|nG*->`Lr!||6pQxAbTeapUf7Dws=B%33j#qlw zCubDwZoVqp>*L7%ZVJmo=I9g@zt~;Avn4zBY%=nqF7=I1x{=FEH_2+5GhZTYXGWY% zXl?S`*K^yAkWN~kh7af=?FhvrghYHoM-hTR@tjCpVGv&^RJ^?5NSXkKY+GFTZF9$W zaMIM_;}<9d{UT#7fBeT66^5J)uFNsJqgFm4Q-r8;dhQUjcmEBkd&=@;4xbu3TuE;D ziKvgI0cORg0}G5Q4#|8O*GK=x+MJl=O#?QfN2V*h|6Km|Qqk)npDM}h#Fhca^rL02 zOfp$5N^cgGKp0GLFh`O!i%TE`!9eZ=oR*d_G{@os&ERc2e~pIy70gf|Qf7tve1Ez1 zW43e!*%BPt(B)^&DJaZL*b*6QKKMK}dlPXptguj}%=@ZRX;06Z%f0N^rMZte{c--T zijIaB&PhqR4coN>7EQ5k+B?PQMbo}h;r+f2n3Gu2y_iflQVAVa;^Z(`wCt?GQ)9kZ zj!PU^5!T5^e^<$@PI_U$5#mY*n1vAt1%gCC85m>~Ko1a-Mi}wOz})QLAKRc=VZpP) zd?caa?T@Xiig@qaKs);AEzk>kc3(bnNiV1PH6q157V{KfEGoM1RZgoIyLfrY_c%K` z%vf&Z&?65#&+ZO*l-!yV+jpo%-9d8 zFACAp+YpA6aN_*{1o0dvz9SaIb+V{{aX^$X2rUt4fueBi@2NnW-qK&3+izKNvCUJv z)DLSWdFMx;pLI0eC7|QP9-o`-3i8XAY%J|1x$5p=y62d_+L2SKJ9Xj`LmH}c{YLaA zH#0Lle{8xX#PpEA*1EXLM`}bXU__88fe``a(I1ysQ!%HbR#UObE9skUOdxR{LjYVJ z5CVXZML7Y(Q5=KC`Lj4mpitWpXn&0JzdfgajC1DEc$K4z%)Ne!GwmDBH@U;hvNl^} z5vICvS8bQi=jQeMPI+#ts}Hob88um_>%(nle^(^Gh&thYp@XWishYI$8NnnR1_1>v zNMIPD1PKR@Erf{G1qqCar6Y0vz~9t3zvKLO|7Lrv5kJeCwrVkJ;`gr#K*v~u-QcQ(2>olMzUXx?;_KH>Y$Y3-;E(eSGL*XOHz_!059 ze-_Wxk_~C94NrV?D!a95@6p6)i=}fT<*SvP4MX=`0xH7X%;p|6 zEt4*r6DSOLB*>R6A|@1+MNxp2CnX5Y1DBOx3?!k@zdynMLxP62D=0WSFYBjcXkiNp z`b)EFxNU11=cd^yl==!}UauUD!s~D5cCx$E{XbS+zhSHKwAa9-axF8ox35<^e-x99 zS5;eeBGL12ic1^> z)XB5ZUI$#=YF3QM3LodKl@Qa@f8g4?#Z|W763Z}$!L75c#KdAH%9AKs=VB)tOH;9e zLgE;QQY-@lqK+UEh+{aEp-C2}AyNXImLw6t9gsF<>^~LSZ7Y7^KM>p>PjA@WE#u#J zC~w@aE_6#A{r=NB|Loi=F*ShU0%mmgVy453k8$IO{-)P2hV(fwdf`FGe~#WyH7gDp zEkDNgJ8^n+ISJy@f@e_l*LNPqbV>C>GI4dxu z*cw4Hg1|5&NH7@0OMoJ!cphzIRp&p%`jZa6pX%)YFo%fw9hIN=%Y7<4IdZ|wf;^4S z7u^gZo9(by2X>7gSeddXe{OT)Fx~F?Zx`+iQ0`IrY*w!WV>AYBUiSL(!V%3cT1;Xi zt>Uvv*7`>$lcE0S?=>htZMxDNhx=~-R9SO>=cS`5tNavGx0#oU#Xm~y>=keh;Db>C zhf#5rGY5+lioq!yWL}b|P~z`hwoMbZy?c3OnVlUs4erFxBZ{&nwi zsZujLF?wLbq((WJP?HAnBuiKv5O{zV=Kw^4mEa&+;S__>K+V92xUd8NSA*>DZ=1dY z{nmB$I}s|z-|_j~e|OeS2O7lSnj4;wwZ7iXNR{kd@SV zL?V)faR>xkaD>GhW)6}tfaH^HSkmuDV|>Hcu2)IgA$Pu`f7l4~bq}kx=KR#UU|kct zb>u3!0-el@YpUf}ji}QSrb(otETF7X=0giN0`U18S*tIeE<7Xm{#eKo^MQgbVDh(A zn|sRgt+lgEZ=JaNrNw@qk?p#Y9yV`ljCxCDC(hy|VDl7!#IZcfiMy_8N`le2gu@X6 zCB*IHZPLkae_wdCfz-}kfj_O)|yOT)>Vo7abq^xWi<+1JMK+*_CZAhc9Gv+hC~*H4_i z-Yz=H=xSYBpQS)Ts~XuF#MS_M_jut}4$xRY0&aXvJaeklSbTYmfMdo`D8dPdfM7Vt zhdd+Re=K0I!1Le~N(h!^QMip3`J)RHfbBm$Ozi=N{@`mMTPOv;waM_&(ch@QQRCF< z?_B4{iqBi-c$Vd0Nu>O0cN1~U4k7MZ!yy5J zNf@ONKmbq#6A%i=Ay{nEB2fv#65QY1EO30de_tpc7Brm?lwO?#GohgoAbhreDe=SY zu4LdPhffnDl$KQ|h?jq8u9*Hizpe@ll`$U};AfxueoVZjS=7m9WJ_Z4*u&ALPY<5& z9dZV49^W~6$VZnFCp!ypPLEg}yk{GuKI7W4kim<{9;N2$Vr2`QONN*5taM)jFVKMG ze}MEzkq9SJIhvOMGn10PktFS5{&+()vu!KF<#~E3YD?!W)Lay{y~E{I?7~Ym2`*;G zBwLSo$}f;1I&f)|z0(<2L9;N(;l;t_aaCcCbt8&|p0^a|f39BE z|7)ae+#pNem@fhQvku;%7Li$ZPYx0b$CwL)oiRlrI(_2_}2 z&m}4{@(1tL^^rBNpWEMKx9Ul+>#z0|lz$z5Ww2%EtA4Y-d^p(k>79|?eNU)=UUJgU zI5Z>MRc3O`Y};&V%GEE86Zi8z>&x{|$=G@$_rypAbF4Ub7!sSv85RKn7>0ldmC!T= z_z(_`x%g_eP3?W;|J$eVh2kKfaX8On91t)l zN44Sglm34>0KeJ>81wCO7^)9aRDVjEW^D4z+JnzJrh4p8SeKOe>K*=Sb+z})TbFvt z`@c2qZ*x=zdhcR!u;bK?H3r*Vw!HE;*>T7vsxWQ!CHF9w^rQRMj7#bnXNp2NVI(qtghv?;LP->7P=65A1q3(< z20jU~Ne2=*3dnYZ_@kj|A^gl)d}!FvAkL5fegFYyN8{)>hNq; zaO2mw=NFQ!tO^2^&nMi^xPX|`sr8kdR<4c8SJ|w%S0%BpO!OW(dBdU0~ju;SuJ>1JourgU{yjPSE; zi7^}PSakQ!(JHkC22)n3xE?B#P4>~6l>6GCzDw-hiCbTI&oaB1xPPpx${LsEduO^i zr<-qdzhPSIXPPPB>(;3ZAGyW@b+4itT?dc4WZ+jDb3d0nWRHsP`*49JF@(URPhc>f zKzJZuB|I>v01+&YLnI7|&xHS=8v0YX?Owr%>?8g^1qj~PqM? zsXLB5aVU3_+5)qJlYdaQU&y(kPm=FdBc7k-pJsS%Yk~ZuIxNp>?c$^mQnSq~$Mad^ zxMz1|yu9z#ZItA|Dv`}mpCII<|AzVVixPa3H3_uD5E=Wj> zl@Q{UB8_7LgMa?Ld;WZ$T-Y~*F8r@S!>(yY&gU&J4S3wUy3tm-$B=IZy@8Bp*uvYg zW)@nzPxAx9xLgm4Ii;y^33NyxvvLi{(x zUyfe`yu)+Vc`@_Y*R-nat@8SK#-K&!?C8a*J+pUCzwi~^kiR5oUJjp`B=`EU$Argu zGGX4{0rT!psu(C^Y3hCT;Nuazz0CgLcP-|ly`sjMdVAKDtF>J9eSSi_quSEj4OG9a zbzk&?hJW9P*$khOm6XHjqVC~gMqmUUq9hCpl8yud(i9aKAi^;Y1-z1xV*iu&*7h*} z_dK@f$dnl%7G3xji+WDjQKj=t{;6i#+q)fJO*yXmwQJf?e(Hxq7FOv!oY!YuD444p zTU&mutm~k0Uu2%{nzI+#G9s>Y6p^#PgPmz>X@84L>f!K%9&iB^(?H*UWbMjuh^{e@n_i`4Oh;Jn{ilrH`KLr6ynS&+bI5P_0Ro5=%<}|>^XOlL`^nI@;D3WF@TxXZ zziw+Ds%&sP^mzH#I6dX-8+H6Z@VVi&IDc-$B&C24#l!cn-JY)>OZshFIZ`GktM!fQ ze2=&8AvyiDr}aFeX;<$seNLZqXNf*@Ri9jHw%VGW_jPlG&!J`J9D?%^9HY#2Hj9 zg`hajF(^wzfC{l~;>|DXy6wRI?|-pwQIRS9s`H{!cc^Jvu0N;qiG~5Mih`71yNtgX zcyjpHCk6d_&PgG=3PY7Gr|&lHf4XxQXp^RYYlcB#hgc=8(#pltC#Gk{b5=?@E-CNaAJ#wHJa1LB}PAE=&KaH=SIK8~H3|TZs*K2&8j?B*IXRp}Gr8h+E zcs|1LtXqYz%nsv$6>hPSI)5$8x<5D6{c>uc#kQ4jv}{zsz*=e3If@b#$>JPHi4afY z948Tn^D`Vm@PIO~C<~mkZ8Om?Yk>d8*!}^g*u)ucB~GzZj2cT!+^uOJCCe~?^?^)Cm7hOFT3!OeSe~|DCI#9`wzX$~>v3bb5Hni(a*+@(^id8Y7?ARDnqnzP0yv#m zeL+Z(1)<>Q>|dwGUrvIH6jS4Wlf_A3x(oR=%Pz?7ew4c=w@b@hGgFU2pNrS&3=N+6 z($p>BkyYy5DE%XQAAhUPm4&d0Z!CISr_T*n;Fyv@wjFnRWhSoe`Hb50{+Y}sA1pHl z(AK*b8{V&v9K0;bz1*)bx97BS_=qUV8L^RE0>dZ+I1MhrIPnew5_kfpP?{pdp$Ht0 z6MyZKzZniUTg;8;yDZcLJ{f&^(I=PVQB{{epvni-cbMnA|9^VKbK%nJ8D*!q`@MDy zJ{V_kx!)E!WJdDNQ<2IaU?w~Kcx!&HT=sp7%!fHyKAw%UWk#qbH+svI=wc-@ zB~4CM1KnGF_*PaX{(wLA$H7hr{>!SNWJe?rT@>HvRa(*tr^;0+gEHj}T#v=Wlh{ zXlFW6bbmsE1KI*eMw};k0T-u<3j|7uZvt3I+;{U;h8$fz3}dv|HWhqE&C_O*QK-hZN|8(OvVa!Ez0;`>Ra;+%Z3Hyi`J z3}XdC!lMFC3KRs?1jDct2NI+NAprG;+whlPwnY5|*U#tO%>H+H0bI27`pt6#9j@pv zD9FvXx>Tb%W_y9Ci<8{{zt*litfsYn@7fI_$|)j486p*}wf7pOK}edU#L1Mk)?PbB zGJjT-%Aqe&reqGGP!X9TDPv?Pad1kdLOQ4@4Vr%MyK}xTPC5F1-*xrJzOMdy-t`Rk z{k+e6Kf2MEyKl-@58iXom@qFt|4B=*YsQAmr!{L%y)hJ8-!hLqs9;lh(&=OTcAdCn zI`~oau}@Qj{q{HXRlYf)aLg;*W0kq~4S)HJ7?BRF4q_e`Q6i3~L@W>fIE<6hJd3j+ z(nJ`6Ld_B>$&0#N0XvbM^Z5p^z0Lu6tvYyvF|}(`Nw*@}th!ZK{kLWAzBu@nv*Nqk zUVJ1M5!7RL`a8pFrC<+-n_FVXUHTxKx!ciMWp*drqw4XfvvT2Pb8@2ufqx5{ zYKJwAKG2e4JbGSuVYA#~ZR1pk+N2o#egvQu42?^9MvOBO2~TqzLIeL~c$N`yz-hb8 z{X5p7`<5y~PVD???W-P7m+EhR`LO-a-=M)~^8)UaG~bm26{gP;z5x^VXVv}58Ofi$?&?tXTiuVR??EQlF-TbNf(4jj!Oi~k6hNKwz_ZhL6pe)Kik63u*en_Ce z?@s87+&wk-E&49bEY<)~PLJxvbXeI>p|+ zF)F)>2Ve~qi*Q!NV+0Kw8w~iOQXUR~lLUs5B%B#)*T8@2^a|-a6FU`nlhNVvFrQ8W z`84#h-ut<=3bzO7M#uHzbFMY+VpV;7T3_!F-YbwF7a_Tc@48no}c! zSrw;9RE&QDCV@~q!AW5JNpS|`SNNukB?uhBS@;Y9^_jqJJWw#+16fdpLoi1-zaZh-feRI z!zH^~mDj58FgXhwto#Z4-OtbYX4u@@@ z*k^0r@FdG!f;VSlKYL8~R!Tk{{V5a}I2wN%sMDuHF{deRZ%faYq0xQKubZ>!Tk4!R z^O}kt%Cn7Cpsx}v!obNcM$DixjK-6|9$LhUQ5L6Y5d(gLQt}h;JUcb8<9Zng@##1H z)pE;2+swMKSx&WkN#N+-|q-}B2{LBFY5 z7h>$DFBVKJUY+YMKcsB*EyqZRSn=T7A+=R{!CpNcTv+GTlwVip+bas(-rh!6})Qg#`!ey1PT#u>W@BkE9JySIPWgw?i5 zFI6n(podc*Mby=WE~qmTmIAwW0=v$k8CLHcX3Z+sC=ljEY(J^*AjiYeo-O2{evPpMf3ivKGhSLl{rkq5|0Thm~ zG)4ew!Epc*@Bj^U8LoccD(-&>t{N`+O@F1W`Wff{ zt8+Dkjep>H5<&{x5yBd=n3j?#k4bRAgEg0UBT#dmb8BZyE@gFlXY$W zeIswMBw|@*@4-1j;|;&%EA=*c@}@OshRe1pugPa;g{sflnYTX7-bDF+&FaX!NfjY8 z1TTytRz%GTX_QX#yJ6Ayg17e;3(pU(%VzDb&zUgCp?V^0{U3DK4p0u-n5nf?jJJGP zT_;C`VNi!#j8X(B4K#lTHx1$dx$z>D0OVgx18_iyD2(NCR3fFj9Dbe1&iQu)u0D1ZHvcQn zOx8VL`!%(iXN5?vJEC1d{tzN6SYAxTZME^zqqK~bIbYK02=oa>Y z#Up1y{*(`6oMUtZ2X^*deJ(6-&sw8JnZ+9|;y*jXW@?eaivbqZo1WH86$CBB8hZx< z(3%~48-Ugx3a5X@w8HKiU|3K!ivdYSMDPeJ;YCsrO=BQ`VxTZ`a78=Icl`>d6J@#; z-*(^lh-6<0_om0t(v5;M6Be}`+}QnmX|DIK zb-djIlP`bljCSgNbfGh|bbv5tmH*iWmoi|a-Km6!qyw2RW(YDvcMr*D2?uJR01h zm0{NXq|f?60W%w|;=M%+16@hOYqFaf5nzTi_>7bUZp%X`jN&AKY+*Ek@M0;v1rUMH z+2!o|V>P<~m|f36Ww8mqK_N@dYFGA8U7=PZ3|~HF&R&yez74HA*KfC+Y&ykyh{7)Z zBq)C)X+rHZ0%VcLwn&0O^2kb-DI` zH#6$pRwmc$sw;vosaWt!tx?)KW!>ji;XZ%E9=r&WVphJD&Qs_zyX|S+G{~Mx$5#Yc z=j%GhEf-kDuGZ64xu~;xrtZ$<*P65Y)+Tf}S3BepV|rC9qc%!9V7^J~hUQ7}tqF+@ z@_XkS%!Ne*BYBW)BpmQlOhR#Rkr0K0+=>E>%0hNbgK{G7`u%^$igz9K0ES-85E_3i zpBDb|;m1L(%8Gvt0NhK4_r=%bBFvOeL?ml|k)J=qQ^VCDKN_UdXRrqV2r~F^Gy7EZ zJk((C4|@Q_>IS)%-l=AVwh?pR7N{uZ8N=}%sA3=`5HWmL0#F-4QaFau7&3TDL{LKE2a7y0RGkIBDMk?#q*NAQZj54~R1gI>l;RYHNqL&$c?o|{|BTZ6 zx7KzfiYIeb6v9-6#w%>tg&}FNX(!ig7->~AX7$I`jYDTWe4hdDPw^faT3)J}eGle9~9jOE|ls@`ZWqm%4|0 zHH;ibLm>l7f>BVpPy*EqMG}7o#39ehu4zby7UQ%OqXAQvv}09sesZ+ozf{PR3-#L{ zwfWydVBHg^)NZy`9XQP1Ud8jh`beiOQzwLEWz`={KX?_jQgqm(aw6-Hp!-#Ao3tv; zk3vDf@ol3TQo^s~SuY>oTQmRei#vr2URgapU)C(tMSiz$h}bv0OizEQ$i8BfU8bVN zbzx+yp5V)zs#D52BYjm@_&dKak36?psH-&vjx9+zghWUTM|ngHcYQECD6AYqV}N&Z z2qEPeRtz7d{O54y{(leWA7t~|PRA6UPKfMuJieZeYCk=n4bEYukDX$YMOV|OX4CG6 zcNm1fScwUG9u#{5CfR?~PcX#imoaNU4NqEI|J1S1O8vFYNA`#Im?~O6HYv(WUOlAo zdQ(=2)55rZGj;?WuR0)DaD`Jz?-guHT*>SG{#vD4^V8|A&qgjRyqRKiO*We=MkVl3 z6-kmbF2X1VWdV#tXut$WhQJw=hm&mL|JmvMqm-W9hVM@2FW-OZsi19g^VE~}r}N9M zto288`v?CkNoCU1aT0JksE5=5-C~+;_V{E>w~a|gvsnKxJwA_nv}B%PzJe}VE<2rf zyPfAuD;{F!FRxp^S+8ZRp!Ru{r^)Hi)8?wPov*tcOk5?*A8G^Tbx8)t;L;)4?lqcZ zD7gDiLW2kcgqD92GdKl+43D>qtXcoRjvA8tM9+#R9|80 zo!p}>X(#QSw+wcF^O_Gw4VH|tv$h|r==c$jIoCt2ce-M*+Gr84-^n z)(hmHs}2`mt{9-EzB_N|i_*jTdbeKA+~VK;@fm@2KeT_bNXg=$Vc|;UFRwQHFCKQQ zImkLe?GIyX7dX6*0e*pVG#qZ=X&j_b3C7|SKySc#aGWMUHWf?%hjI0fqI-YyoWJ7A z4h31~7|1%dFzd9KnU?Jj+r9}|_P9_mJ>bFd4@1MMIKleo)|B#ICD*YfXAT>99=qd_ zxa0BwHPL_a%ZsDdfVj%fYRZao%9@BS(r=w!JWMX9K4W0uAc6lWzl)~NBh3eYNjuS! zH1+8fx$8|fsj~ORI4Y&#mQpc`@lu+iF$5$aP*`b{7K<2;g-dPFpHW=-`|ozVOb!}AaKZ0ARPjBz5A9WPgJuT`kZyiLNE zm(R#kQzBZ`{OaV+TARQpVYEofGJuZqI6zDYg^CCQ!8uMU28V)?a5E^&;t1C6CDG4L z7yf@poo|&41;a`333Y)XF2CB=4d`v|6e3U@Gs^yD;|VHe0{eA7t1J$VOB|{$z5B-B zbViHd(AHZx_dbX-2jSH5|0_C1_4oH1&;oxd{n#o?$= zr1InL!P7607rGwVPmtNIZr{7I$yyYWov~c5iwM^sOo7KY~o(l<*e?B>O*P!_(MF*;O zjcPGl_&}47;W~dx;~jN#NPs&VS{JGwb2O%HTz0dOmh;mY%F1?4doNwsG&dw&U_I%w zZ&5@%VYqbO?`Q7JkeB3{z15nTJ}$&b<8l4*IDg^v%gY@m%hy-m1TlQDq(yJBG$QC} z+H67YY${A9F3%$*MTt=w2N5jgrL2U5muUzMI30X(&TxO22xHpCuzlC;{zqjnxj?`D zYrZjm6EXMgf`+wxFG{m$&;H_Og`t`TSq0HiBi6r6-WhM1o9LS{u};}F|6N$Qv*5(C zx)&?g^>=$kt@9X%84%Ow33L1XD-T59JNx;$nC_@BBiSQu!mPei*Eit za?H_N=1PBsX@a|>O=KFJv_y)*fnic4#VHZsx)jEd5-6@sLP|lSI3+>Ib`YS`hdmu0 z!jHAWVoR};960vFSU|9f=Q77e$iWbR`)V=~KKeZcqLvv+!Y z+!5i}0(U19YvxNo3(s-md~QrTy8rSHdSAr=5h~%J?juD?5SoXcj$$l8 zbr>i8nb-Us+TNjvm8>t629evkIx~RW{QJD~I$br;MP=v)Tg%6#4Gnb6gz%O{_Z&ur z#7Cakx|gH^EX{vAaPm$2c~f8Ml{W+t{~GDJMFa;6Kw*>e6ozm-g76fJFc?7t6erXB#5jo6 zai0HX>-kS!N&lm&RZs^GzQ`_M!j5^jhOE|FwzjgpgFAf9YFkFaus+wXEv#dEP0tp^ z59*PmvehN;*q12roQkh?Z8WHBe;zi_!=tQVSo;h=b@W!yV-VKk_To2SJ|p0(O_~6K zEMgFmgvG>gSW*n1#1IThalA+@#+Y`OVx5W*|G@4a$Xvm!-Ue+nC$!PEC+7z&5hyvR z$Lin~)e~C0v(?U7^31t|UVqT;L$`#8`KX5ikk`TnUz!RIK>x&^{5Ny_IODZ?j=k$~ z$j^Moxn;V`p4Mf|3^aJXjm^3FN74FfD?ykrqWGEI`>VOX`6E?0#ise*J!)H4<|%JN(P1Y{|wXEp%TncQ)F%Lz{Gthn^f z;nPslKP@~PXYK5E=epOQ!18Ca@1E#W?1vZQ!1F;t>-F-YjeF4z?~*UW0iu%?v^yJ# zTa$+9E@RYkmu#5uVeZ@50Q1;B20e~^aQ|b7!mgG22E%`!r5s+f|IVLNlI%9g9lieG zUC#bvr^*6i%v@%i;fiskWSi(lw+4?L{pY6CBQWxdJgjB4tstNWsBQaTZL0vaEfb?Z z$dec8ElF2}fcCR`T8~RRWNy!Vb^E`tTy|JubWPU3-9CPmwUzq?De(Jl!0$bRUf{7exH5W*E@5Qjp;LBa7Zsb-`izXf%3h(E55D>KL=;7 zjva<{#v(S;?y19AWKDP7J{1Q-E0Xm+#ywjLbH3^w1Fs=P^-u5Jq461EzRrJio8MsN z{KZR z5C-MR_Np;mOZ-1jZ0aQO3*FRXXHpZF5Am&Pb~Ko-WR;(t3?JZ4k99;p49a=iqI-Uw zsvR&tDz)sCiR;+MXL>$a;kGI)*yvVaLDK&6)usExV{azdxN2Bbhs4#q69ncjf2c8S z8gXiBiKS;#>W6|Jm+A@ldW)7~0P0BLP?=aO)N1$0+ai+Z2eAk74>Js zqPZ<8S@*)mjWlh|zFno@G*sj*lO(_?DM6r8ngq#BgaBwmVNx6}{{pF>Mgg@UCA7F5 z#{1bf>>Y|aeLoYVy=kW?=#J2+Y-sq)hxK-aY6_DaE8ZtQrQHwTcio-hf9V};dCz9n z!A}k~LW?^mnteXlp4czgaDAm)Q)%(5QE>23$EDs=5Fva}>>y~=uQ_A7s5B`kXz!oi zTb?e$mBzq*uNZ=01c#9*Y%8-Ml4(**qZEVj5-|(DE5kspg14jPUFf|2NG@ni2PEx% z;`?dT%^|COYjVxZ&HES#e~)~~ZvRzCkHS*edOeV!3B2g9?3#vDb zV-zYD1EL}&F&q)oEKW(JAj|V28t-xu`w97=pzrGUgxbvka_Q=Nf1%oke24gk6e*vN z&$|BBeRdl+m5tFlWbb+M(8*x5K))v5W`u7EmhX3Y`0p2Mk}tzazBQ2+o*$+yPc|6n zZE(dT_|3Ms8e2io`xT#sO+zZ&OZGmg_byCTd+0efQ#L@1!Q~-{h~t3OJb{T&oEEV> zO0z5@VniYU<|QP>e|9;0{j;J_pp35k0?U_wddck^?YdD7^2SwE=1mJDjZs(3*Q#o0 zKPf2mJPKRw#EHbXXyFJm_xR{o<0iqOvIKqmibRhK#VcYww_T31*y;JMmXtqne)8SB zGe#D!&?-8z>gDc0m6uyIlCG{ZzuCMiWsi3298kQh2GZqifBNU7Sc+2|;3hnd0Q`m! zfTxO~&Z&gJSe8Y=|EYF;xSza;{O=TZH4DNA zlJ+wX1J@2vcy@fe{XlkdNxg!>lg;6+&F=3^%2bz~f0}drxSi6WM`t77hLlZoLmcfA z{9cKCr!O`;JYvkMoB`=gQQE$-_KN-XZgxxWroM2l#_jAWe%*GZ$*IrL&m1Oqy3ESg zWUXn)8rSD`DnVXn-t;WIF);yRJW#)Qmd8mbMg@Tl0P`e6k*JguL3vRTiA$uMq}>w& z=6~oYf1N4wv|Y`%I~CXM||=%p)U955_+uUh+R%bvig@vT9-3~}$lnGPTS51Rt Date: Fri, 23 May 2025 22:31:55 +0900 Subject: [PATCH 025/285] Add support for bulk updates of food products with new request type and API hook --- user/src/api/foodProdutApi.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/user/src/api/foodProdutApi.ts b/user/src/api/foodProdutApi.ts index d076626d9..468e561f5 100644 --- a/user/src/api/foodProdutApi.ts +++ b/user/src/api/foodProdutApi.ts @@ -28,6 +28,11 @@ export type CreateFoodProductsRequest = { food_products: FoodProduct[]; }; +// 一括更新用のリクエスト型 +export type UpdateFoodProductsRequest = { + food_products: (FoodProduct & { id: number })[]; +}; + const API_ENDPOINTS = { FOOD_PRODUCTS: '/food_products', }; @@ -67,8 +72,17 @@ export const useUpdateFoodProducts = () => { const endpoint = `${API_ENDPOINTS.FOOD_PRODUCTS}`; const { trigger, isMutating, error } = useAuthenticatedPatch(endpoint); + const updateFoodProducts = async ( + foodProducts: (FoodProduct & { id: number })[] + ) => { + const request: UpdateFoodProductsRequest = { + food_products: foodProducts, + }; + return trigger({ body: request }); + }; + return { - trigger, + updateFoodProducts, isMutating, error, }; From c308b85bee77ec5c1ec2891912d08e351b4e07b5 Mon Sep 17 00:00:00 2001 From: harata-t <22.t.harata.nutfes@gmail.com> Date: Mon, 26 May 2025 22:24:03 +0900 Subject: [PATCH 026/285] =?UTF-8?q?=E8=A4=87=E6=95=B0create,=20=E8=A4=87?= =?UTF-8?q?=E6=95=B0update,=20group=5Fid=E6=8C=87=E5=AE=9Aget?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/app/controllers/employees_controller.rb | 81 +++++++++++++++++---- api/config/routes.rb | 9 ++- 2 files changed, 73 insertions(+), 17 deletions(-) diff --git a/api/app/controllers/employees_controller.rb b/api/app/controllers/employees_controller.rb index 1f9797754..65d4c14e2 100644 --- a/api/app/controllers/employees_controller.rb +++ b/api/app/controllers/employees_controller.rb @@ -1,10 +1,7 @@ class EmployeesController < ApplicationController + before_action :authenticate_api_user!, except: [:index, :show, :get_by_group] before_action :set_employee, only: [:show, :update, :destroy] - # 🌟この行を追加!GET以外のアクションだけに認証かける神テク✨ - before_action :authenticate_api_user!, only: [:index, :show] - - # GET /employees # GET /employees.json def index @@ -18,6 +15,12 @@ def show render json: fmt(ok, @employee) end + # GET /employees/group/:group_id + def get_by_group + @employees = Employee.where(group_id: params[:group_id]) + render json: fmt(ok, @employees) + end + # POST /employees # POST /employees.json def create @@ -25,6 +28,18 @@ def create render json: fmt(created, @employee) end + # POST /employees/bulk + # POST /employees/bulk.json + def bulk_create + created = Employee.transaction do + employee_bulk_params.map { |attrs| Employee.create!(attrs) } + end + + render json: fmt(created, created), status: :created + rescue ActiveRecord::RecordInvalid => e + render json: fmt(unprocessable_entity, [], e.record.errors.full_messages), status: :unprocessable_entity + end + # PATCH/PUT /employees/1 # PATCH/PUT /employees/1.json def update @@ -32,25 +47,59 @@ def update render json: fmt(created, @employee, "Updated employee id = "+params[:id]) end + # PATCH/PUT /employees/bulk + # PATCH/PUT /employees/bulk.json + def bulk_update + updates = employee_bulk_params(include_id: true) + + updated = Employee.transaction do + updates.map do |attrs| + emp = Employee.find(attrs.delete(:id)) + emp.update!(attrs) + emp + end + end + + render json: fmt(ok, updated) + rescue ActiveRecord::RecordNotFound => e + render json: fmt(not_found, [], e.message), status: :not_found + rescue ActiveRecord::RecordInvalid => e + render json: fmt(unprocessable_entity, [], e.record.errors.full_messages), status: :unprocessable_entity + end + # DELETE /employees/1 # DELETE /employees/1.json def destroy @employee.destroy - render json: fmt(ok ,[], "Deleted employee = "+params[:id]) + render json: fmt(ok, [], "Deleted employee = "+params[:id]) end private - # Use callbacks to share common setup or constraints between actions. - def set_employee - if Employee.exists?(params[:id]) - @employee = Employee.find(params[:id]) - else - render json: fmt(not_found, [], "Not found employee = "+params[:id]) - end - end - # Only allow a list of trusted parameters through. - def employee_params - params.permit(:group_id, :name, :student_id, :stool_test_id) + def set_employee + @employee = Employee.find_by(id: params[:id]) + return if @employee + + render json: fmt(not_found, [], "Not found employee id=#{params[:id]}"), status: :not_found + end + + # 単一レコード用 Strong Parameters + def employee_params + params.permit(:group_id, :name, :student_id, :stool_test_id) + end + + # 複数レコード用 Strong Parameters + # include_id: true で :id を許可 + def employee_bulk_params(include_id: false) + permitted = %i[group_id name student_id stool_test_id] + permitted << :id if include_id + + params.require(:employees).map do |emp| + ActionController::Parameters + .new(emp.to_unsafe_h) + .permit(permitted) + .to_h + .symbolize_keys end + end end diff --git a/api/config/routes.rb b/api/config/routes.rb index e66300601..f7de2ab23 100644 --- a/api/config/routes.rb +++ b/api/config/routes.rb @@ -64,7 +64,14 @@ end end resources :stages - resources :employees + resources :employees do + collection do + get 'group/:group_id', to: 'employees#get_by_group' + post 'bulk', to: 'employees#bulk_create' + put 'bulk', to: 'employees#bulk_update' + patch 'bulk', to: 'employees#bulk_update' + end + end resources :sub_reps do collection do get 'group/:group_id', to: 'sub_reps#get_by_group_id' From 83cd1aa63e1231bfd81237e5ea2259377f29147f Mon Sep 17 00:00:00 2001 From: harata-t <22.t.harata.nutfes@gmail.com> Date: Mon, 26 May 2025 22:49:56 +0900 Subject: [PATCH 027/285] =?UTF-8?q?employeesApi=E3=81=AE=E4=BD=9C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- user/src/api/employeesApi.ts | 66 ++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 user/src/api/employeesApi.ts diff --git a/user/src/api/employeesApi.ts b/user/src/api/employeesApi.ts new file mode 100644 index 000000000..d7a741e3f --- /dev/null +++ b/user/src/api/employeesApi.ts @@ -0,0 +1,66 @@ +import { + useAuthenticatedDelete, + useAuthenticatedGet, + useAuthenticatedPatch, + useAuthenticatedPost, +} from '@/hooks/useApi'; + +const API_ENDPOINTS = { + EMPLOYEES: '/employees', + EMPLOYEES_BULK_CREATE: '/employees/bulk_create', + EMPLOYEES_BULK_UPDATE: '/employees/bulk_update', + EMPLOYEES_GROUP: '/employees/group', +}; + +export type ApiResponse = { + status: { code: number; message: string }; + data: T; +}; + +export type Employee = { + id: number; + groupId: number; + name: string; + studentId: string; + stoolTestId?: string; + createdAt: string; + updatedAt: string; +}; + +export const useGetEmployees = (groupId: number | null) => { + const endpoint = + groupId !== null + ? `${API_ENDPOINTS.EMPLOYEES_GROUP}/${groupId}` + : API_ENDPOINTS.EMPLOYEES; + const { data, error, isLoading, mutate } = + useAuthenticatedGet>(endpoint); + + return { + employees: data?.data ?? [], + isLoading, + hasError: !!error, + mutateEmployees: mutate, + }; +}; + +export const useCreateEmployee = () => { + return useAuthenticatedPost(API_ENDPOINTS.EMPLOYEES); +}; + +export const useCreateEmployeesBulk = () => { + return useAuthenticatedPost(API_ENDPOINTS.EMPLOYEES_BULK_CREATE); +}; + +export const useUpdateEmployee = (id: number | null) => { + const endpoint = id !== null ? `${API_ENDPOINTS.EMPLOYEES}/${id}` : null; + return useAuthenticatedPatch(endpoint); +}; + +export const useUpdateEmployeesBulk = () => { + return useAuthenticatedPatch(API_ENDPOINTS.EMPLOYEES_BULK_UPDATE); +}; + +export const useDeleteEmployee = (id: number | null) => { + const endpoint = id !== null ? `${API_ENDPOINTS.EMPLOYEES}/${id}` : null; + return useAuthenticatedDelete(endpoint); +}; From 18b95d6340128130e52c048106fdb7077a4e9fb0 Mon Sep 17 00:00:00 2001 From: harata-t <22.t.harata.nutfes@gmail.com> Date: Mon, 26 May 2025 23:01:11 +0900 Subject: [PATCH 028/285] =?UTF-8?q?route=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/config/routes.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/api/config/routes.rb b/api/config/routes.rb index f7de2ab23..a2b8f28a6 100644 --- a/api/config/routes.rb +++ b/api/config/routes.rb @@ -67,9 +67,9 @@ resources :employees do collection do get 'group/:group_id', to: 'employees#get_by_group' - post 'bulk', to: 'employees#bulk_create' - put 'bulk', to: 'employees#bulk_update' - patch 'bulk', to: 'employees#bulk_update' + post 'bulk_create', to: 'employees#bulk_create' + put 'bulk_update', to: 'employees#bulk_update' + patch 'bulk_update', to: 'employees#bulk_update' end end resources :sub_reps do From 74d24b180666ab9b7cab4f1175e7cd58296217a2 Mon Sep 17 00:00:00 2001 From: harata-t <22.t.harata.nutfes@gmail.com> Date: Tue, 27 May 2025 19:43:51 +0900 Subject: [PATCH 029/285] =?UTF-8?q?unprocessable=5Fentity=E3=81=AE?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/app/controllers/application_controller.rb | 3 ++- api/app/controllers/employees_controller.rb | 14 ++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/api/app/controllers/application_controller.rb b/api/app/controllers/application_controller.rb index 419d422a6..de36cd477 100644 --- a/api/app/controllers/application_controller.rb +++ b/api/app/controllers/application_controller.rb @@ -1,12 +1,13 @@ class ApplicationController < ActionController::API include DeviseTokenAuth::Concerns::SetUserByToken - + # status def ok; return { code: 200, message: 'Success' } end def created; return { code: 201, message: 'Created'} end def not_found; return { code: 404, message: 'Not Found' } end def internal_server_error; return { code: 500, message: 'Internal Server Error' } end def undefined; return { code: 999, message: 'Undefined' } end + def unprocessable_entity; return { code: 422, message: 'Unprocessable Entity' } end # 出力するAPIのフォーマット def fmt(status=undefined, data=[], option="") diff --git a/api/app/controllers/employees_controller.rb b/api/app/controllers/employees_controller.rb index 65d4c14e2..4c31aeb10 100644 --- a/api/app/controllers/employees_controller.rb +++ b/api/app/controllers/employees_controller.rb @@ -34,17 +34,19 @@ def bulk_create created = Employee.transaction do employee_bulk_params.map { |attrs| Employee.create!(attrs) } end - render json: fmt(created, created), status: :created rescue ActiveRecord::RecordInvalid => e - render json: fmt(unprocessable_entity, [], e.record.errors.full_messages), status: :unprocessable_entity + render json: fmt(unprocessable_entity, [], e.record.errors.full_messages.join(', ')), status: :unprocessable_entity end # PATCH/PUT /employees/1 # PATCH/PUT /employees/1.json def update - @employee.update(employee_params) - render json: fmt(created, @employee, "Updated employee id = "+params[:id]) + if @employee.update(employee_params) + render json: fmt(ok, @employee, "Updated employee id = #{params[:id]}") + else + render json: fmt(unprocessable_entity, [], @employee.errors.full_messages.join(', ')), status: :unprocessable_entity + end end # PATCH/PUT /employees/bulk @@ -64,14 +66,14 @@ def bulk_update rescue ActiveRecord::RecordNotFound => e render json: fmt(not_found, [], e.message), status: :not_found rescue ActiveRecord::RecordInvalid => e - render json: fmt(unprocessable_entity, [], e.record.errors.full_messages), status: :unprocessable_entity + render json: fmt(unprocessable_entity, [], e.record.errors.full_messages.join(', ')), status: :unprocessable_entity end # DELETE /employees/1 # DELETE /employees/1.json def destroy @employee.destroy - render json: fmt(ok, [], "Deleted employee = "+params[:id]) + render json: fmt(ok, [], "Deleted employee = #{params[:id]}") end private From a1b82fa44b1c936051c0fbf63de68ac5ba2ef3a8 Mon Sep 17 00:00:00 2001 From: harata-t <22.t.harata.nutfes@gmail.com> Date: Wed, 28 May 2025 10:44:35 +0900 Subject: [PATCH 030/285] =?UTF-8?q?api/api.ts=E3=81=8B=E3=82=89import?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- user/src/api/employeesApi.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/user/src/api/employeesApi.ts b/user/src/api/employeesApi.ts index d7a741e3f..23b906bad 100644 --- a/user/src/api/employeesApi.ts +++ b/user/src/api/employeesApi.ts @@ -4,6 +4,7 @@ import { useAuthenticatedPatch, useAuthenticatedPost, } from '@/hooks/useApi'; +import { ApiResponse } from './api'; const API_ENDPOINTS = { EMPLOYEES: '/employees', @@ -12,11 +13,6 @@ const API_ENDPOINTS = { EMPLOYEES_GROUP: '/employees/group', }; -export type ApiResponse = { - status: { code: number; message: string }; - data: T; -}; - export type Employee = { id: number; groupId: number; From d393ca7073018659bb1f4f5cc90b5fbf2230ec01 Mon Sep 17 00:00:00 2001 From: hikahana <22.h.hanada.nutfes@gmail.com> Date: Wed, 28 May 2025 22:04:55 +0900 Subject: [PATCH 031/285] =?UTF-8?q?fix;=20bulk=E3=81=AEapi=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/app/controllers/application_controller.rb | 3 +- .../controllers/food_products_controller.rb | 112 +++++++++--------- api/config/routes.rb | 3 + 3 files changed, 62 insertions(+), 56 deletions(-) diff --git a/api/app/controllers/application_controller.rb b/api/app/controllers/application_controller.rb index 419d422a6..de36cd477 100644 --- a/api/app/controllers/application_controller.rb +++ b/api/app/controllers/application_controller.rb @@ -1,12 +1,13 @@ class ApplicationController < ActionController::API include DeviseTokenAuth::Concerns::SetUserByToken - + # status def ok; return { code: 200, message: 'Success' } end def created; return { code: 201, message: 'Created'} end def not_found; return { code: 404, message: 'Not Found' } end def internal_server_error; return { code: 500, message: 'Internal Server Error' } end def undefined; return { code: 999, message: 'Undefined' } end + def unprocessable_entity; return { code: 422, message: 'Unprocessable Entity' } end # 出力するAPIのフォーマット def fmt(status=undefined, data=[], option="") diff --git a/api/app/controllers/food_products_controller.rb b/api/app/controllers/food_products_controller.rb index e58bf015f..1172dcb76 100644 --- a/api/app/controllers/food_products_controller.rb +++ b/api/app/controllers/food_products_controller.rb @@ -2,7 +2,6 @@ class FoodProductsController < ApplicationController before_action :set_food_product, only: [:show, :destroy] # GET /food_products - # GET /food_products.json def index @food_products = FoodProduct.all render json: fmt(ok, @food_products) @@ -15,89 +14,92 @@ def group_food_products end # GET /food_products/1 - # GET /food_products/1.json def show render json: fmt(ok, @food_product) end # POST /food_products - # POST /food_products.json - # 複数件の作成も行う。配列で渡すことで複数件も可能。 + # 単一レコード作成 def create - ActiveRecord::Base.transaction do - @food_products = FoodProduct.create(food_product_array_params) + @food_product = FoodProduct.new(food_product_params) + if @food_product.save + render json: fmt(created, @food_product) + else + render json: fmt(unprocessable_entity, [], @food_product.errors.full_messages.join(', ')), status: :unprocessable_entity + end + end - if @food_products.all?(&:persisted?) - render json: fmt(created, @food_products) - else - render json: fmt(not_found, [], "Not found food_products") - raise ActiveRecord::Rollback - end + # POST /food_products/bulk_create + # 複数レコード作成 + def bulk_create + created = FoodProduct.transaction do + food_product_bulk_params.map { |attrs| FoodProduct.create!(attrs) } end + render json: fmt(created, created), status: :created + rescue ActiveRecord::RecordInvalid => e + render json: fmt(unprocessable_entity, [], e.record.errors.full_messages.join(', ')), status: :unprocessable_entity end - # PATCH/PUT /food_products - # PATCH/PUT /food_products.json + # PATCH/PUT /food_products/:id + # 単一レコード更新 def update - @food_products = [] - errors = [] - - ActiveRecord::Base.transaction do - params[:food_products].each do |food_product_data| - food_product = FoodProduct.find_by(id: food_product_data[:id]) - if food_product.nil? - errors << { id: food_product_data[:id], error: "Food product not found" } - next - end - - if food_product.update(food_product_data.permit(:group_id, :name, :is_cooking, :first_day_num, :second_day_num)) - @food_products << food_product - else - errors << { id: food_product_data[:id], errors: food_product.errors.full_messages } - end - end - - if errors.any? - render json: { status: 422, message: "Some updates failed", errors: errors }, status: :unprocessable_entity - raise ActiveRecord::Rollback - end + @food_product = FoodProduct.find_by(id: params[:id]) + if @food_product&.update(food_product_params) + render json: fmt(ok, @food_product, "Updated food_product id = #{params[:id]}") + else + render json: fmt(unprocessable_entity, [], @food_product&.errors&.full_messages&.join(', ') || "Not found"), status: :unprocessable_entity end + end - if errors.empty? - render json: fmt(ok, @food_products, "Updated food_products") + # PATCH/PUT /food_products/bulk_update + # 複数レコード更新 + def bulk_update + updates = food_product_bulk_params(include_id: true) + updated = FoodProduct.transaction do + updates.map do |attrs| + fp = FoodProduct.find(attrs.delete(:id)) + fp.update!(attrs) + fp + end end + render json: fmt(ok, updated) + rescue ActiveRecord::RecordNotFound => e + render json: fmt(not_found, [], e.message), status: :not_found + rescue ActiveRecord::RecordInvalid => e + render json: fmt(unprocessable_entity, [], e.record.errors.full_messages.join(', ')), status: :unprocessable_entity end # DELETE /food_products/1 - # DELETE /food_products/1.json def destroy @food_product.destroy - render json: fmt(ok, [], "Deleted food_product = "+params[:id]) + render json: fmt(ok, [], "Deleted food_product = #{params[:id]}") end private - # Use callbacks to share common setup or constraints between actions. + def set_food_product - if FoodProduct.exists?(params[:id]) - @food_product = FoodProduct.find(params[:id]) - else - render json: fmt(not_found, [], "Not found food_product = "+params[:id]) - end + @food_product = FoodProduct.find_by(id: params[:id]) + return if @food_product + render json: fmt(not_found, [], "Not found food_product id=#{params[:id]}"), status: :not_found end - # Only allow a list of trusted parameters through. + # 単一レコード用 Strong Parameters def food_product_params params.permit(:group_id, :name, :is_cooking, :first_day_num, :second_day_num) end - # Handle both single and bulk creation parameters - def food_product_array_params - if params[:food_products].present? - params.require(:food_products).map { |f| f.permit(:group_id, :name, :is_cooking, :first_day_num, :second_day_num) } - elsif params.is_a?(Array) - params.map { |f| f.permit(:group_id, :name, :is_cooking, :first_day_num, :second_day_num) } - else - [food_product_params] + # 複数レコード用 Strong Parameters + # include_id: true で :id を許可 + def food_product_bulk_params(include_id: false) + permitted = %i[group_id name is_cooking first_day_num second_day_num] + permitted << :id if include_id + + params.require(:food_products).map do |fp| + ActionController::Parameters + .new(fp.to_unsafe_h) + .permit(permitted) + .to_h + .symbolize_keys end end end diff --git a/api/config/routes.rb b/api/config/routes.rb index 68dbbc51a..155ded78d 100644 --- a/api/config/routes.rb +++ b/api/config/routes.rb @@ -43,6 +43,9 @@ collection do patch '', to: 'food_products#update' get 'group/:group_id', to: 'food_products#group_food_products' + post 'bulk_create', to: 'food_products#bulk_create' + put 'bulk_update', to: 'food_products#bulk_update' + patch 'bulk_update', to: 'food_products#bulk_update' end end resources :assign_rental_items From 2cadda155a78d0dba5d7af1d068807240ad68fac Mon Sep 17 00:00:00 2001 From: hikahana <22.h.hanada.nutfes@gmail.com> Date: Wed, 28 May 2025 22:05:11 +0900 Subject: [PATCH 032/285] =?UTF-8?q?fix:=20hook=E3=81=AB=E3=82=82bulk?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- user/src/api/foodProdutApi.ts | 44 +++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/user/src/api/foodProdutApi.ts b/user/src/api/foodProdutApi.ts index 468e561f5..f4e3f7900 100644 --- a/user/src/api/foodProdutApi.ts +++ b/user/src/api/foodProdutApi.ts @@ -50,6 +50,27 @@ export const useGetFoodProducts = () => { }; }; +/** + * 単一作成用hook + */ +export const useCreateFoodProduct = () => { + const endpoint = `${API_ENDPOINTS.FOOD_PRODUCTS}`; + const { trigger, isMutating, error } = useAuthenticatedPost(endpoint); + + const createFoodProduct = async (foodProduct: FoodProduct) => { + return trigger({ body: foodProduct }); + }; + + return { + createFoodProduct, + isMutating, + error, + }; +}; + +/** + * 複数作成用hook + */ export const useCreateFoodProducts = () => { const endpoint = `${API_ENDPOINTS.FOOD_PRODUCTS}`; const { trigger, isMutating, error } = useAuthenticatedPost(endpoint); @@ -68,6 +89,29 @@ export const useCreateFoodProducts = () => { }; }; +/** + * 単一更新用hook + */ +export const useUpdateFoodProduct = () => { + const endpoint = `${API_ENDPOINTS.FOOD_PRODUCTS}`; + const { trigger, isMutating, error } = useAuthenticatedPatch(endpoint); + + const updateFoodProduct = async ( + foodProduct: FoodProduct & { id: number } + ) => { + return trigger({ body: foodProduct }); + }; + + return { + updateFoodProduct, + isMutating, + error, + }; +}; + +/** + * 複数更新用hook + */ export const useUpdateFoodProducts = () => { const endpoint = `${API_ENDPOINTS.FOOD_PRODUCTS}`; const { trigger, isMutating, error } = useAuthenticatedPatch(endpoint); From 64bb432f3fa291f396071e7b8e24c63b1445387d Mon Sep 17 00:00:00 2001 From: izuizu0424 <24.i.yasui.nutfes@gmail.com> Date: Fri, 30 May 2025 18:33:10 +0900 Subject: [PATCH 033/285] =?UTF-8?q?feat:=20=E8=B3=BC=E5=85=A5=E5=93=81?= =?UTF-8?q?=E7=94=B3=E8=AB=8BAPI=E3=81=AE=E6=A7=8B=E9=80=A0=E3=82=92?= =?UTF-8?q?=E5=BE=93=E6=A5=AD=E5=93=A1=E3=83=BB=E7=81=AB=E6=B0=97=E4=BD=BF?= =?UTF-8?q?=E7=94=A8API=E3=81=AB=E5=90=88=E3=82=8F=E3=81=9B=E3=81=A6?= =?UTF-8?q?=E7=B5=B1=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- user/src/api/purchaseListsApi.ts | 40 +++++++++++++++----------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/user/src/api/purchaseListsApi.ts b/user/src/api/purchaseListsApi.ts index d580e69ed..c8630d37c 100644 --- a/user/src/api/purchaseListsApi.ts +++ b/user/src/api/purchaseListsApi.ts @@ -1,4 +1,5 @@ import { + useAuthenticatedDelete, useAuthenticatedGet, useAuthenticatedPatch, useAuthenticatedPost, @@ -15,16 +16,8 @@ export type PurchaseList = { url?: string | null; }; -export type PurchaseListResponse = { +export type PurchaseListResponse = PurchaseList & { id: number; - groupId: number; - foodProductId: number; - shopId: number; - fesDateId: number; - items: string; - isFresh: boolean; - purchaseDate: string; - url?: string | null; createdAt: string; updatedAt: string; }; @@ -41,37 +34,42 @@ export type ApiResponse = { const API_ENDPOINTS = { PURCHASE_LIST: '/purchase_lists', + PURCHASE_LIST_GROUP: '/purchase_lists/group', }; // グループIDで取得 -export const useGetPurchaseListsByGroupId = (groupId: number | undefined) => { - // groupId が undefined の場合は null を渡して SWR 側でフェッチしないようにする +export const useGetPurchaseLists = (groupId: number | null) => { const endpoint = - groupId !== undefined - ? `${API_ENDPOINTS.PURCHASE_LIST}/group/${groupId}` - : null; + groupId !== null + ? `${API_ENDPOINTS.PURCHASE_LIST_GROUP}/${groupId}` + : API_ENDPOINTS.PURCHASE_LIST; const { data, error, isLoading, mutate } = useAuthenticatedGet>(endpoint); - const purchaseLists = data?.data ?? undefined; - return { - purchaseLists, + purchaseLists: data?.data ?? [], isLoading, - error, + hasError: !!error, mutatePurchaseLists: mutate, }; }; // 新規作成 -export const usePostPurchaseList = () => { +export const useCreatePurchaseList = () => { return useAuthenticatedPost(API_ENDPOINTS.PURCHASE_LIST); }; // 更新 -export const useUpdatePurchaseList = (id: number) => { - return useAuthenticatedPatch(`${API_ENDPOINTS.PURCHASE_LIST}/${id}`); +export const useUpdatePurchaseList = (id: number | null) => { + const endpoint = id !== null ? `${API_ENDPOINTS.PURCHASE_LIST}/${id}` : null; + return useAuthenticatedPatch(endpoint); +}; + +// 削除(必要に応じて) +export const useDeletePurchaseList = (id: number | null) => { + const endpoint = id !== null ? `${API_ENDPOINTS.PURCHASE_LIST}/${id}` : null; + return useAuthenticatedDelete(endpoint); }; /* From f255a00f4a6c679faa7b8305d4f5f16bfae864be Mon Sep 17 00:00:00 2001 From: harata-t <22.t.harata.nutfes@gmail.com> Date: Fri, 30 May 2025 18:39:50 +0900 Subject: [PATCH 034/285] =?UTF-8?q?create=E3=81=A8update=E3=82=92=E3=81=BE?= =?UTF-8?q?=E3=81=A8=E3=82=81=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/app/controllers/employees_controller.rb | 77 +++++++++++---------- api/config/routes.rb | 4 +- 2 files changed, 41 insertions(+), 40 deletions(-) diff --git a/api/app/controllers/employees_controller.rb b/api/app/controllers/employees_controller.rb index 4c31aeb10..95ccaae2f 100644 --- a/api/app/controllers/employees_controller.rb +++ b/api/app/controllers/employees_controller.rb @@ -1,5 +1,5 @@ class EmployeesController < ApplicationController - before_action :authenticate_api_user!, except: [:index, :show, :get_by_group] + # before_action :authenticate_api_user!, except: [:index, :show, :get_by_group] before_action :set_employee, only: [:show, :update, :destroy] # GET /employees @@ -28,15 +28,41 @@ def create render json: fmt(created, @employee) end - # POST /employees/bulk - # POST /employees/bulk.json - def bulk_create - created = Employee.transaction do - employee_bulk_params.map { |attrs| Employee.create!(attrs) } + # POST /employees/upsert + # POST /employees/upsert.json + def upsert + now = Time.current + records = employees_params.map do |attrs| + common = { + group_id: attrs[:group_id], + name: attrs[:name], + student_id: attrs[:student_id], + stool_test_id: attrs[:stool_test_id] + } + + if attrs[:id].present? + # 更新対象:ID+updated_at + common.merge(id: attrs[:id], updated_at: now) + else + # 新規作成対象:created_at+updated_at + common.merge(created_at: now, updated_at: now) + end end - render json: fmt(created, created), status: :created - rescue ActiveRecord::RecordInvalid => e - render json: fmt(unprocessable_entity, [], e.record.errors.full_messages.join(', ')), status: :unprocessable_entity + + # 一度の SQL で INSERT/UPDATE をまとめ実行 + Employee.upsert_all( + records, + unique_by: :id, + update_only: %i[group_id name student_id stool_test_id updated_at] + ) + + # 更新/挿入されたレコードを取得して返却 + processed_ids = records.map { |r| r[:id] }.compact + processed = Employee.where(id: processed_ids) + + render json: fmt(ok, processed) + rescue ActiveRecord::StatementInvalid => e + render json: fmt(unprocessable_entity, [], e.message), status: :unprocessable_entity end # PATCH/PUT /employees/1 @@ -49,26 +75,6 @@ def update end end - # PATCH/PUT /employees/bulk - # PATCH/PUT /employees/bulk.json - def bulk_update - updates = employee_bulk_params(include_id: true) - - updated = Employee.transaction do - updates.map do |attrs| - emp = Employee.find(attrs.delete(:id)) - emp.update!(attrs) - emp - end - end - - render json: fmt(ok, updated) - rescue ActiveRecord::RecordNotFound => e - render json: fmt(not_found, [], e.message), status: :not_found - rescue ActiveRecord::RecordInvalid => e - render json: fmt(unprocessable_entity, [], e.record.errors.full_messages.join(', ')), status: :unprocessable_entity - end - # DELETE /employees/1 # DELETE /employees/1.json def destroy @@ -91,17 +97,14 @@ def employee_params end # 複数レコード用 Strong Parameters - # include_id: true で :id を許可 - def employee_bulk_params(include_id: false) - permitted = %i[group_id name student_id stool_test_id] - permitted << :id if include_id - + def employees_params params.require(:employees).map do |emp| ActionController::Parameters .new(emp.to_unsafe_h) - .permit(permitted) - .to_h - .symbolize_keys + .permit(:id, :group_id, :name, :student_id, :stool_test_id) + .to_h.symbolize_keys end end end + + diff --git a/api/config/routes.rb b/api/config/routes.rb index a2b8f28a6..4975fd9cc 100644 --- a/api/config/routes.rb +++ b/api/config/routes.rb @@ -67,9 +67,7 @@ resources :employees do collection do get 'group/:group_id', to: 'employees#get_by_group' - post 'bulk_create', to: 'employees#bulk_create' - put 'bulk_update', to: 'employees#bulk_update' - patch 'bulk_update', to: 'employees#bulk_update' + post 'upsert', to: 'employees#upsert' end end resources :sub_reps do From 3dd40a405e04f1eaf8197b16351f5f3fa2606ecd Mon Sep 17 00:00:00 2001 From: harata-t <22.t.harata.nutfes@gmail.com> Date: Fri, 30 May 2025 18:41:58 +0900 Subject: [PATCH 035/285] =?UTF-8?q?api=E3=81=AEhooks=E3=81=AE=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- user/src/api/employeesApi.ts | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/user/src/api/employeesApi.ts b/user/src/api/employeesApi.ts index 23b906bad..0dde931c0 100644 --- a/user/src/api/employeesApi.ts +++ b/user/src/api/employeesApi.ts @@ -8,9 +8,7 @@ import { ApiResponse } from './api'; const API_ENDPOINTS = { EMPLOYEES: '/employees', - EMPLOYEES_BULK_CREATE: '/employees/bulk_create', - EMPLOYEES_BULK_UPDATE: '/employees/bulk_update', - EMPLOYEES_GROUP: '/employees/group', + EMPLOYEES_UPSERT: '/employees/upsert', }; export type Employee = { @@ -26,7 +24,7 @@ export type Employee = { export const useGetEmployees = (groupId: number | null) => { const endpoint = groupId !== null - ? `${API_ENDPOINTS.EMPLOYEES_GROUP}/${groupId}` + ? `${API_ENDPOINTS.EMPLOYEES}/group/${groupId}` : API_ENDPOINTS.EMPLOYEES; const { data, error, isLoading, mutate } = useAuthenticatedGet>(endpoint); @@ -43,8 +41,8 @@ export const useCreateEmployee = () => { return useAuthenticatedPost(API_ENDPOINTS.EMPLOYEES); }; -export const useCreateEmployeesBulk = () => { - return useAuthenticatedPost(API_ENDPOINTS.EMPLOYEES_BULK_CREATE); +export const useUpsertEmployees = () => { + return useAuthenticatedPost(API_ENDPOINTS.EMPLOYEES_UPSERT); }; export const useUpdateEmployee = (id: number | null) => { @@ -52,10 +50,6 @@ export const useUpdateEmployee = (id: number | null) => { return useAuthenticatedPatch(endpoint); }; -export const useUpdateEmployeesBulk = () => { - return useAuthenticatedPatch(API_ENDPOINTS.EMPLOYEES_BULK_UPDATE); -}; - export const useDeleteEmployee = (id: number | null) => { const endpoint = id !== null ? `${API_ENDPOINTS.EMPLOYEES}/${id}` : null; return useAuthenticatedDelete(endpoint); From 0acb5cffde7826c05eaf40d317bc7526145bf117 Mon Sep 17 00:00:00 2001 From: i2_yosuke <95607264+YosukeIida@users.noreply.github.com> Date: Fri, 23 May 2025 19:56:57 +0900 Subject: [PATCH 036/285] =?UTF-8?q?[feat]=20venueMap=E3=81=AE=20=E5=9E=8B?= =?UTF-8?q?=E5=AE=9A=E7=BE=A9,=20API=20Client=E4=BD=9C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- user/src/api/venueMapApi.ts | 67 +++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 user/src/api/venueMapApi.ts diff --git a/user/src/api/venueMapApi.ts b/user/src/api/venueMapApi.ts new file mode 100644 index 000000000..2c2049089 --- /dev/null +++ b/user/src/api/venueMapApi.ts @@ -0,0 +1,67 @@ +import useSWRMutation from 'swr/mutation'; +import { useApiGet } from '@/hooks/useApi'; +import { deleteFetcher, patchFetcher, postFetcher } from './api'; + +// リクエスト用の型定義 +export type VenueMapRequest = { + groupId: number; + pictureName: string; + picturePath: string; +}; + +// レスポンス用の型定義 +export type VenueMapResponse = { + id: number; + groupId: number; + pictureName: string; + picturePath: string; + createdAt: string; + updatedAt: string; +}; + +type ApiStatus = { code: number; message: string }; + +export type ApiResponse = { + status: ApiStatus; + data: T; +}; + +const API_ENDPOINTS = { + VENUE_MAPS: '/venue_maps', +}; + +// 特定の会場図を取得するためのカスタムフック +export const useGetVenueMap = (id: number | null) => { + const endpoint = id ? `${API_ENDPOINTS.VENUE_MAPS}/${id}` : null; + + const { + data: response, + error, + isLoading, + mutate, + } = useApiGet>(endpoint); + + const venueMap = response?.status.code === 200 ? response.data : null; + + return { + venueMap, + error, + isLoading, + mutate, + }; +}; + +// SWR Mutationを使った新規作成用フック +export const useCreateVenueMap = () => { + return useSWRMutation(API_ENDPOINTS.VENUE_MAPS, postFetcher); +}; + +// SWR Mutationを使った更新用フック +export const useUpdateVenueMap = (id: number) => { + return useSWRMutation(`${API_ENDPOINTS.VENUE_MAPS}/${id}`, patchFetcher); +}; + +// SWR Mutationを使った削除用フック +export const useDeleteVenueMap = (id: number) => { + return useSWRMutation(`${API_ENDPOINTS.VENUE_MAPS}/${id}`, deleteFetcher); +}; From 841de01f9021ec0aec5c735611aec1319beb2cd2 Mon Sep 17 00:00:00 2001 From: hikahana <22.h.hanada.nutfes@gmail.com> Date: Fri, 30 May 2025 18:49:58 +0900 Subject: [PATCH 037/285] =?UTF-8?q?fix:=20bulk=5Fupsert=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controllers/food_products_controller.rb | 58 +++++++------------ api/config/routes.rb | 4 +- 2 files changed, 21 insertions(+), 41 deletions(-) diff --git a/api/app/controllers/food_products_controller.rb b/api/app/controllers/food_products_controller.rb index 1172dcb76..c24acad5e 100644 --- a/api/app/controllers/food_products_controller.rb +++ b/api/app/controllers/food_products_controller.rb @@ -29,13 +29,27 @@ def create end end - # POST /food_products/bulk_create - # 複数レコード作成 - def bulk_create - created = FoodProduct.transaction do - food_product_bulk_params.map { |attrs| FoodProduct.create!(attrs) } + # POST /food_products/bulk_upsert + # 複数レコード作成・更新 (upsert_all使用) + def bulk_upsert + keys = [:id, :group_id, :name, :is_cooking, :first_day_num, :second_day_num, :created_at, :updated_at] + now = Time.current + upserts = params[:food_products].map do |fp| + attrs = ActionController::Parameters + .new(fp.to_unsafe_h) + .permit(*keys) + .to_h + .symbolize_keys + keys.each { |k| attrs[k] = nil unless attrs.key?(k) } + attrs[:created_at] ||= now + attrs[:updated_at] = now + attrs end - render json: fmt(created, created), status: :created + + upserts = upserts.map { |attrs| attrs.transform_keys(&:to_s) } + FoodProduct.upsert_all(upserts) + + render json: fmt(ok) rescue ActiveRecord::RecordInvalid => e render json: fmt(unprocessable_entity, [], e.record.errors.full_messages.join(', ')), status: :unprocessable_entity end @@ -51,23 +65,6 @@ def update end end - # PATCH/PUT /food_products/bulk_update - # 複数レコード更新 - def bulk_update - updates = food_product_bulk_params(include_id: true) - updated = FoodProduct.transaction do - updates.map do |attrs| - fp = FoodProduct.find(attrs.delete(:id)) - fp.update!(attrs) - fp - end - end - render json: fmt(ok, updated) - rescue ActiveRecord::RecordNotFound => e - render json: fmt(not_found, [], e.message), status: :not_found - rescue ActiveRecord::RecordInvalid => e - render json: fmt(unprocessable_entity, [], e.record.errors.full_messages.join(', ')), status: :unprocessable_entity - end # DELETE /food_products/1 def destroy @@ -87,19 +84,4 @@ def set_food_product def food_product_params params.permit(:group_id, :name, :is_cooking, :first_day_num, :second_day_num) end - - # 複数レコード用 Strong Parameters - # include_id: true で :id を許可 - def food_product_bulk_params(include_id: false) - permitted = %i[group_id name is_cooking first_day_num second_day_num] - permitted << :id if include_id - - params.require(:food_products).map do |fp| - ActionController::Parameters - .new(fp.to_unsafe_h) - .permit(permitted) - .to_h - .symbolize_keys - end - end end diff --git a/api/config/routes.rb b/api/config/routes.rb index 155ded78d..1de8311c8 100644 --- a/api/config/routes.rb +++ b/api/config/routes.rb @@ -43,9 +43,7 @@ collection do patch '', to: 'food_products#update' get 'group/:group_id', to: 'food_products#group_food_products' - post 'bulk_create', to: 'food_products#bulk_create' - put 'bulk_update', to: 'food_products#bulk_update' - patch 'bulk_update', to: 'food_products#bulk_update' + post 'bulk_upsert', to: 'food_products#bulk_upsert' end end resources :assign_rental_items From 907dbfa4bbc0f8f6cb7b526cfb55fcc16b2cef33 Mon Sep 17 00:00:00 2001 From: hikahana <22.h.hanada.nutfes@gmail.com> Date: Fri, 30 May 2025 18:50:16 +0900 Subject: [PATCH 038/285] =?UTF-8?q?generated:=20bulk=5Fupsert=E5=88=86?= =?UTF-8?q?=E3=81=AE=E8=87=AA=E5=8B=95=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/oas_docs/.docs | Bin 61649 -> 61664 bytes api/oas_docs/dist/oas_doc.yml | 22 ++++++++++++++++++++++ api/oas_docs/src/paths/food_product.yml | 22 ++++++++++++++++++++++ 3 files changed, 44 insertions(+) diff --git a/api/oas_docs/.docs b/api/oas_docs/.docs index 49ba59cf9473e36c7989797cf8686639d5038995..149803ff0a828a4c09b4caea99fd3783900c0ad4 100644 GIT binary patch delta 44230 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 delta 44215 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 diff --git a/api/oas_docs/dist/oas_doc.yml b/api/oas_docs/dist/oas_doc.yml index b13de2bb2..543c26b10 100644 --- a/api/oas_docs/dist/oas_doc.yml +++ b/api/oas_docs/dist/oas_doc.yml @@ -5431,6 +5431,28 @@ paths: deprecated: false requestBody: "$ref": "#/components/requestBodies/FoodProduct" + "/food_products/bulk_upsert": + post: + tags: + - food_product + summary: post summary + description: post description + responses: + '201': + description: food_product description + content: + application/json: + schema: + "$ref": "#/components/schemas/FoodProduct" + '422': + description: food_product description + content: + application/json: + schema: + "$ref": "#/components/schemas/FoodProduct" + deprecated: false + requestBody: + "$ref": "#/components/requestBodies/FoodProduct" "/food_products/group/{group_id}": get: tags: diff --git a/api/oas_docs/src/paths/food_product.yml b/api/oas_docs/src/paths/food_product.yml index 7f98a6525..e1c34bc48 100644 --- a/api/oas_docs/src/paths/food_product.yml +++ b/api/oas_docs/src/paths/food_product.yml @@ -58,6 +58,28 @@ paths: deprecated: false requestBody: "$ref": "#/components/requestBodies/FoodProduct" + "/food_products/bulk_upsert": + post: + tags: + - food_product + summary: post summary + description: post description + responses: + '201': + description: food_product description + content: + application/json: + schema: + "$ref": "#/components/schemas/FoodProduct" + '422': + description: food_product description + content: + application/json: + schema: + "$ref": "#/components/schemas/FoodProduct" + deprecated: false + requestBody: + "$ref": "#/components/requestBodies/FoodProduct" "/food_products/group/{group_id}": get: tags: From 54c9c4215b16a1c135cf9390b072006231ae161a Mon Sep 17 00:00:00 2001 From: hikahana <22.h.hanada.nutfes@gmail.com> Date: Fri, 30 May 2025 18:53:20 +0900 Subject: [PATCH 039/285] =?UTF-8?q?fix:=20=E4=BF=AE=E6=AD=A3=E3=81=95?= =?UTF-8?q?=E3=82=8C=E3=81=9F=E3=82=A8=E3=83=B3=E3=83=89=E3=83=9D=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E3=83=88=E3=81=AE=E3=83=91=E3=82=B9=E3=82=92=E3=82=B0?= =?UTF-8?q?=E3=83=AB=E3=83=BC=E3=83=97ID=E3=81=AB=E5=9F=BA=E3=81=A5?= =?UTF-8?q?=E3=81=84=E3=81=A6=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- user/src/api/cookingProcessOrderApi.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user/src/api/cookingProcessOrderApi.ts b/user/src/api/cookingProcessOrderApi.ts index c9fa822fd..fa85ee19f 100644 --- a/user/src/api/cookingProcessOrderApi.ts +++ b/user/src/api/cookingProcessOrderApi.ts @@ -36,7 +36,7 @@ const API_ENDPOINTS = { }; export const useGetCookingProcessOrder = (groupId: number | undefined) => { - const endpoint = `${API_ENDPOINTS.COOKING_PROCESS_ORDER}/${groupId}`; + const endpoint = `${API_ENDPOINTS.COOKING_PROCESS_ORDER}/group/${groupId}`; const { data, error, isLoading, mutate } = useAuthenticatedGet>(endpoint); From 54a86f6b57462447edfdab7b9420aa11b1499af3 Mon Sep 17 00:00:00 2001 From: izuizu0424 <24.i.yasui.nutfes@gmail.com> Date: Fri, 30 May 2025 18:54:40 +0900 Subject: [PATCH 040/285] =?UTF-8?q?feat:=20PurchaseListsController?= =?UTF-8?q?=E3=81=ABbulk=5Fcreate=E3=83=BBbulk=5Fupdate=E6=A9=9F=E8=83=BD?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controllers/purchase_lists_controller.rb | 57 +++++++++---------- 1 file changed, 26 insertions(+), 31 deletions(-) diff --git a/api/app/controllers/purchase_lists_controller.rb b/api/app/controllers/purchase_lists_controller.rb index eec133383..d3b50b79e 100644 --- a/api/app/controllers/purchase_lists_controller.rb +++ b/api/app/controllers/purchase_lists_controller.rb @@ -2,61 +2,56 @@ class PurchaseListsController < ApplicationController before_action :set_purchase_list, only: [:show, :update, :destroy] # GET /purchase_lists - # GET /purchase_lists.json def index @purchase_lists = PurchaseList.all render json: fmt(ok, @purchase_lists) end # GET /purchase_lists/1 - # GET /purchase_lists/1.json def show render json: fmt(ok, @purchase_list) end # POST /purchase_lists - # POST /purchase_lists.json def create - @purchase_list = PurchaseList.create(purchase_list_params) - render json: fmt(created, @purchase_list) + @purchase_list = PurchaseList.new(purchase_list_params) + + if @purchase_list.save + render json: fmt(created, @purchase_list) + else + render json: fmt(unprocessable_entity, [], @purchase_list.errors.full_messages.join(', ')), status: :unprocessable_entity + end end # PATCH/PUT /purchase_lists/1 - # PATCH/PUT /purchase_lists/1.json def update - @purchase_list.update(purchase_list_params) - render json: fmt(created, @purchase_list, "Updated purchase_list id = "+params[:id]) + if @purchase_list.update(purchase_list_params) + render json: fmt(ok, @purchase_list, "Updated purchase_list id = #{params[:id]}") + else + render json: fmt(unprocessable_entity, [], @purchase_list.errors.full_messages.join(', ')), status: :unprocessable_entity + end end # DELETE /purchase_lists/1 - # DELETE /purchase_lists/1.json def destroy @purchase_list.destroy - render json: fmt(ok, [], "Deleted purchase_list = "+params[:id]) + render json: fmt(ok, [], "Deleted purchase_list = #{params[:id]}") end # GET /purchase_lists/group/:group_id -def get_by_group_id - @purchase_lists = PurchaseList.where(group_id: params[:group_id]) + def get_by_group_id + @purchase_lists = PurchaseList.where(group_id: params[:group_id]) - if @purchase_lists.any? - render json: fmt(ok, @purchase_lists) - else - render json: fmt(not_found, [], "Not found purchase_lists with group_id = " + params[:group_id]) - end -end - - private - # Use callbacks to share common setup or constraints between actions. - def set_purchase_list - if PurchaseList.exists?(params[:id]) - @purchase_list = PurchaseList.find(params[:id]) - else - render json: fmt(not_found, [], "Not found purhase_list = "+params[:id]) - end + if @purchase_lists.any? + render json: fmt(ok, @purchase_lists) + else + render json: fmt(not_found, [], "Not found purchase_lists with group_id = #{params[:group_id]}") end - # Only allow a list of trusted parameters through. - def purchase_list_params - params.permit(:food_product_id, :shop_id, :fes_date_id, :items, :is_fresh, :purchase_date, :url) + end + + # POST /purchase_lists/bulk_create + def bulk_create + created = PurchaseList.transaction do + purchase_list_bulk_params.map { |attrs| PurchaseList.create!(attrs) } end -end + render json: fmt(created, created), s From 59d25657ee93339fd3fef691295391079bdc145a Mon Sep 17 00:00:00 2001 From: izuizu0424 <24.i.yasui.nutfes@gmail.com> Date: Fri, 30 May 2025 18:59:43 +0900 Subject: [PATCH 041/285] =?UTF-8?q?feat:=20purchase=5Flists=E3=81=AE?= =?UTF-8?q?=E3=83=AB=E3=83=BC=E3=83=86=E3=82=A3=E3=83=B3=E3=82=B0=E3=81=AB?= =?UTF-8?q?bulk=5Fcreate=E3=83=BBbulk=5Fupdate=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/config/routes.rb | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/api/config/routes.rb b/api/config/routes.rb index e66300601..0477eb4e0 100644 --- a/api/config/routes.rb +++ b/api/config/routes.rb @@ -42,19 +42,14 @@ get 'group/:group_id', to: 'purchase_lists#get_by_group_id' end end - post "/purchase_lists" => "purchase_lists#create" - resources :food_products - resources :assign_rental_items - resources :rentable_items - resources :rental_items - resources :rental_item_allow_lists - resources :stocker_items - resources :stocker_places - resources :rental_orders do - collection do - get 'group/:group_id', to: 'rental_orders#get_by_group_id' - end + resources :purchase_lists do + collection do + get 'group/:group_id', to: 'purchase_lists#get_by_group_id' + post 'bulk_create', to: 'purchase_lists#bulk_create' + put 'bulk_update', to: 'purchase_lists#bulk_update' + patch 'bulk_update', to: 'purchase_lists#bulk_update' end +end resources :assign_items resources :assign_stages From 1d0a67c5096d1b9db324feb618c00e9ddf84151d Mon Sep 17 00:00:00 2001 From: izuizu0424 <24.i.yasui.nutfes@gmail.com> Date: Fri, 30 May 2025 19:03:14 +0900 Subject: [PATCH 042/285] =?UTF-8?q?feat:=20purchase=5Flists=E7=94=A8?= =?UTF-8?q?=E3=81=AEbulk=5Fcreate=E3=83=BBbulk=5Fupdate=E7=94=A8API?= =?UTF-8?q?=E3=83=95=E3=83=83=E3=82=AF=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- user/src/api/purchaseListsApi.ts | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/user/src/api/purchaseListsApi.ts b/user/src/api/purchaseListsApi.ts index c8630d37c..a1938de05 100644 --- a/user/src/api/purchaseListsApi.ts +++ b/user/src/api/purchaseListsApi.ts @@ -35,6 +35,8 @@ export type ApiResponse = { const API_ENDPOINTS = { PURCHASE_LIST: '/purchase_lists', PURCHASE_LIST_GROUP: '/purchase_lists/group', + PURCHASE_LIST_BULK_CREATE: '/purchase_lists/bulk_create', + PURCHASE_LIST_BULK_UPDATE: '/purchase_lists/bulk_update', }; // グループIDで取得 @@ -55,18 +57,28 @@ export const useGetPurchaseLists = (groupId: number | null) => { }; }; -// 新規作成 +// 新規作成(単件) export const useCreatePurchaseList = () => { return useAuthenticatedPost(API_ENDPOINTS.PURCHASE_LIST); }; -// 更新 +// 一括作成(bulk_create) +export const useCreatePurchaseListsBulk = () => { + return useAuthenticatedPost(API_ENDPOINTS.PURCHASE_LIST_BULK_CREATE); +}; + +// 更新(単件) export const useUpdatePurchaseList = (id: number | null) => { const endpoint = id !== null ? `${API_ENDPOINTS.PURCHASE_LIST}/${id}` : null; return useAuthenticatedPatch(endpoint); }; -// 削除(必要に応じて) +// 一括更新(bulk_update) +export const useUpdatePurchaseListsBulk = () => { + return useAuthenticatedPatch(API_ENDPOINTS.PURCHASE_LIST_BULK_UPDATE); +}; + +// 削除 export const useDeletePurchaseList = (id: number | null) => { const endpoint = id !== null ? `${API_ENDPOINTS.PURCHASE_LIST}/${id}` : null; return useAuthenticatedDelete(endpoint); From 606c5f31999fe19532a973db8b8ce4bc9eddfb51 Mon Sep 17 00:00:00 2001 From: izuizu0424 <24.i.yasui.nutfes@gmail.com> Date: Fri, 30 May 2025 19:22:57 +0900 Subject: [PATCH 043/285] =?UTF-8?q?feat:422=E3=81=AE=E3=82=84=E3=81=A4?= =?UTF-8?q?=E8=B6=B3=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/app/controllers/application_controller.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/api/app/controllers/application_controller.rb b/api/app/controllers/application_controller.rb index 419d422a6..8fd184333 100644 --- a/api/app/controllers/application_controller.rb +++ b/api/app/controllers/application_controller.rb @@ -7,6 +7,7 @@ def created; return { code: 201, message: 'Created'} end def not_found; return { code: 404, message: 'Not Found' } end def internal_server_error; return { code: 500, message: 'Internal Server Error' } end def undefined; return { code: 999, message: 'Undefined' } end + def unprocessable_entity; return { code: 422, message: 'Unprocessable Entity' } end # 出力するAPIのフォーマット def fmt(status=undefined, data=[], option="") From cebe8ba5d24d9dcccefc1ea8b40f1b4dac44ebaa Mon Sep 17 00:00:00 2001 From: harata-t <22.t.harata.nutfes@gmail.com> Date: Fri, 30 May 2025 19:29:53 +0900 Subject: [PATCH 044/285] =?UTF-8?q?upsert=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/app/controllers/employees_controller.rb | 31 ++++++++------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/api/app/controllers/employees_controller.rb b/api/app/controllers/employees_controller.rb index 95ccaae2f..60843ea6e 100644 --- a/api/app/controllers/employees_controller.rb +++ b/api/app/controllers/employees_controller.rb @@ -1,5 +1,5 @@ class EmployeesController < ApplicationController - # before_action :authenticate_api_user!, except: [:index, :show, :get_by_group] + before_action :authenticate_api_user!, except: [:index, :show, :get_by_group] before_action :set_employee, only: [:show, :update, :destroy] # GET /employees @@ -30,33 +30,26 @@ def create # POST /employees/upsert # POST /employees/upsert.json - def upsert + def bulk_upsert now = Time.current - records = employees_params.map do |attrs| - common = { - group_id: attrs[:group_id], - name: attrs[:name], - student_id: attrs[:student_id], - stool_test_id: attrs[:stool_test_id] - } - - if attrs[:id].present? - # 更新対象:ID+updated_at - common.merge(id: attrs[:id], updated_at: now) - else - # 新規作成対象:created_at+updated_at - common.merge(created_at: now, updated_at: now) - end + keys = %i[id group_id name student_id stool_test_id created_at updated_at] + + records = params.require(:employees).map do |emp| + attrs = ActionController::Parameters + .new(emp.to_unsafe_h) + .permit(*keys) + .to_h + .symbolize_keys + attrs[:created_at] ||= now + attrs[:updated_at] = now end - # 一度の SQL で INSERT/UPDATE をまとめ実行 Employee.upsert_all( records, unique_by: :id, update_only: %i[group_id name student_id stool_test_id updated_at] ) - # 更新/挿入されたレコードを取得して返却 processed_ids = records.map { |r| r[:id] }.compact processed = Employee.where(id: processed_ids) From c331f2c56b735ba88e7fb20ad248870b7d170ffa Mon Sep 17 00:00:00 2001 From: hikahana <22.h.hanada.nutfes@gmail.com> Date: Fri, 30 May 2025 19:32:17 +0900 Subject: [PATCH 045/285] refactor: rename bulk_upsert to upsert in routes and controller --- .../controllers/food_products_controller.rb | 26 +++++++++++++++---- api/config/routes.rb | 2 +- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/api/app/controllers/food_products_controller.rb b/api/app/controllers/food_products_controller.rb index c24acad5e..bb7372887 100644 --- a/api/app/controllers/food_products_controller.rb +++ b/api/app/controllers/food_products_controller.rb @@ -29,14 +29,15 @@ def create end end - # POST /food_products/bulk_upsert + # POST /food_products/upsert # 複数レコード作成・更新 (upsert_all使用) - def bulk_upsert + def upsert keys = [:id, :group_id, :name, :is_cooking, :first_day_num, :second_day_num, :created_at, :updated_at] now = Time.current - upserts = params[:food_products].map do |fp| + + upserts = params[:food_products].map do |foodProduct| attrs = ActionController::Parameters - .new(fp.to_unsafe_h) + .new(foodProduct.to_unsafe_h) .permit(*keys) .to_h .symbolize_keys @@ -49,7 +50,22 @@ def bulk_upsert upserts = upserts.map { |attrs| attrs.transform_keys(&:to_s) } FoodProduct.upsert_all(upserts) - render json: fmt(ok) + # 更新/挿入されたレコードを取得して返却 + processed = upserts.map do |attrs| + if attrs["id"].present? + FoodProduct.find_by(id: attrs["id"]) + else + FoodProduct.where( + group_id: attrs["group_id"], + name: attrs["name"], + is_cooking: attrs["is_cooking"], + first_day_num: attrs["first_day_num"], + second_day_num: attrs["second_day_num"] + ).order(created_at: :desc).first + end + end.compact + + render json: fmt(ok, processed) rescue ActiveRecord::RecordInvalid => e render json: fmt(unprocessable_entity, [], e.record.errors.full_messages.join(', ')), status: :unprocessable_entity end diff --git a/api/config/routes.rb b/api/config/routes.rb index 1de8311c8..d1bb555a8 100644 --- a/api/config/routes.rb +++ b/api/config/routes.rb @@ -43,7 +43,7 @@ collection do patch '', to: 'food_products#update' get 'group/:group_id', to: 'food_products#group_food_products' - post 'bulk_upsert', to: 'food_products#bulk_upsert' + post 'upsert', to: 'food_products#upsert' end end resources :assign_rental_items From 920076372fa0783398f0f1a18e348682c972b9b1 Mon Sep 17 00:00:00 2001 From: harata-t <22.t.harata.nutfes@gmail.com> Date: Fri, 30 May 2025 19:45:56 +0900 Subject: [PATCH 046/285] =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/app/controllers/employees_controller.rb | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/api/app/controllers/employees_controller.rb b/api/app/controllers/employees_controller.rb index 60843ea6e..d7221188f 100644 --- a/api/app/controllers/employees_controller.rb +++ b/api/app/controllers/employees_controller.rb @@ -30,7 +30,7 @@ def create # POST /employees/upsert # POST /employees/upsert.json - def bulk_upsert + def upsert now = Time.current keys = %i[id group_id name student_id stool_test_id created_at updated_at] @@ -42,13 +42,10 @@ def bulk_upsert .symbolize_keys attrs[:created_at] ||= now attrs[:updated_at] = now + attrs end - Employee.upsert_all( - records, - unique_by: :id, - update_only: %i[group_id name student_id stool_test_id updated_at] - ) + Employee.upsert_all(records) processed_ids = records.map { |r| r[:id] }.compact processed = Employee.where(id: processed_ids) From 36188fe37da56647b25c8d5a4dbc58521966560d Mon Sep 17 00:00:00 2001 From: i2_yosuke <95607264+YosukeIida@users.noreply.github.com> Date: Fri, 30 May 2025 19:55:16 +0900 Subject: [PATCH 047/285] =?UTF-8?q?[fix]=20group=5Fid=E3=81=AB=E3=82=88?= =?UTF-8?q?=E3=82=8B=E4=BC=9A=E5=A0=B4=E5=9B=B3=E3=81=AE=E5=8F=96=E5=BE=97?= =?UTF-8?q?=E6=A9=9F=E8=83=BD=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- user/src/api/venueMapApi.ts | 62 ++++++++++++++++++++++++------------- 1 file changed, 41 insertions(+), 21 deletions(-) diff --git a/user/src/api/venueMapApi.ts b/user/src/api/venueMapApi.ts index 2c2049089..3b5ef30ee 100644 --- a/user/src/api/venueMapApi.ts +++ b/user/src/api/venueMapApi.ts @@ -1,6 +1,10 @@ -import useSWRMutation from 'swr/mutation'; -import { useApiGet } from '@/hooks/useApi'; -import { deleteFetcher, patchFetcher, postFetcher } from './api'; +import { KeyedMutator } from 'swr'; +import { + useAuthenticatedDelete, + useAuthenticatedGet, + useAuthenticatedPatch, + useAuthenticatedPost, +} from '@/hooks/useApi'; // リクエスト用の型定義 export type VenueMapRequest = { @@ -30,38 +34,54 @@ const API_ENDPOINTS = { VENUE_MAPS: '/venue_maps', }; -// 特定の会場図を取得するためのカスタムフック -export const useGetVenueMap = (id: number | null) => { - const endpoint = id ? `${API_ENDPOINTS.VENUE_MAPS}/${id}` : null; - +// データ取得用フック +// groupId に null を渡した場合、API リクエストは実行されません。 +export const useGetVenueMap = (groupId: number | null) => { + const endpoint = + groupId !== null ? `${API_ENDPOINTS.VENUE_MAPS}/group/${groupId}` : null; const { data: response, - error, - isLoading, - mutate, - } = useApiGet>(endpoint); + error: apiError, + isLoading: apiIsLoading, + mutate: apiMutate, + } = useAuthenticatedGet>(endpoint); + + // groupId が null の場合 + if (groupId === null) { + return { + venueMap: null, + error: null, + isLoading: false, // groupId が null の場合はローディングしない + // groupId が null のためAPI呼び出しは行われない。 + // mutateVenueMap はインターフェースの一貫性のためにダミー関数を返す。 + mutateVenueMap: (() => Promise.resolve(undefined)) as KeyedMutator< + ApiResponse + >, + }; + } + // groupId が存在する場合の通常の処理 const venueMap = response?.status.code === 200 ? response.data : null; return { venueMap, - error, - isLoading, - mutate, + error: apiError, + isLoading: apiIsLoading, + mutateVenueMap: apiMutate, }; }; -// SWR Mutationを使った新規作成用フック +// 会場図作成用フック (POST) export const useCreateVenueMap = () => { - return useSWRMutation(API_ENDPOINTS.VENUE_MAPS, postFetcher); + return useAuthenticatedPost(API_ENDPOINTS.VENUE_MAPS); }; -// SWR Mutationを使った更新用フック -export const useUpdateVenueMap = (id: number) => { - return useSWRMutation(`${API_ENDPOINTS.VENUE_MAPS}/${id}`, patchFetcher); +// 会場図更新用フック (PATCH) +export const usePatchVenueMap = (id: number) => { + return useAuthenticatedPatch(`${API_ENDPOINTS.VENUE_MAPS}/${id}`); }; -// SWR Mutationを使った削除用フック +// 会場図削除用フック (DELETE) export const useDeleteVenueMap = (id: number) => { - return useSWRMutation(`${API_ENDPOINTS.VENUE_MAPS}/${id}`, deleteFetcher); + return useAuthenticatedDelete(`${API_ENDPOINTS.VENUE_MAPS}/${id}`); }; From 12360ec6258764ec8479a9989e27008acf3fbd47 Mon Sep 17 00:00:00 2001 From: i2_yosuke <95607264+YosukeIida@users.noreply.github.com> Date: Fri, 30 May 2025 19:55:27 +0900 Subject: [PATCH 048/285] =?UTF-8?q?[feat]=20group=5Fid=E3=81=AB=E3=82=88?= =?UTF-8?q?=E3=82=8B=E4=BC=9A=E5=A0=B4=E3=83=9E=E3=83=83=E3=83=97=E5=8F=96?= =?UTF-8?q?=E5=BE=97=E6=A9=9F=E8=83=BD=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/app/controllers/venue_maps_controller.rb | 10 ++++++++++ api/config/routes.rb | 6 +++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/api/app/controllers/venue_maps_controller.rb b/api/app/controllers/venue_maps_controller.rb index 4e7fd10fc..96fd31bbb 100644 --- a/api/app/controllers/venue_maps_controller.rb +++ b/api/app/controllers/venue_maps_controller.rb @@ -35,6 +35,16 @@ def destroy render json: fmt(ok, [], "Deleted venue_map = "+params[:id]) end + # GET /venue_maps/group/:group_id + def get_by_group_id + venue_map = VenueMap.find_by(group_id: params[:group_id]) + if venue_map + render json: fmt(ok, venue_map) + else + render json: fmt(not_found, [], "VenueMap not found for group_id: #{params[:group_id]}") + end + end + private # Use callbacks to share common setup or constraints between actions. def set_venue_map diff --git a/api/config/routes.rb b/api/config/routes.rb index e66300601..0cd6e80aa 100644 --- a/api/config/routes.rb +++ b/api/config/routes.rb @@ -104,7 +104,11 @@ get 'group/:group_id', to: 'public_relations#get_by_group_id' end end - resources :venue_maps + resources :venue_maps do + collection do + get 'group/:group_id', to: 'venue_maps#get_by_group_id' + end + end resources :announcements resources :cooking_process_orders resources :contact_persons From 0d6eb06e49576b63b294a890dc4e18a009a12990 Mon Sep 17 00:00:00 2001 From: harata-t <22.t.harata.nutfes@gmail.com> Date: Sat, 31 May 2025 16:17:48 +0900 Subject: [PATCH 049/285] =?UTF-8?q?id=E3=81=8C=E3=81=AA=E3=81=84=E5=A0=B4?= =?UTF-8?q?=E5=90=88=E3=81=AFnil=E3=82=92=E4=BB=98=E3=81=91=E3=82=8B?= =?UTF-8?q?=E3=80=81employees=5Fparams=E3=81=A7permit=E3=81=A8=E3=83=8F?= =?UTF-8?q?=E3=83=83=E3=82=B7=E3=83=A5=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/app/controllers/employees_controller.rb | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/api/app/controllers/employees_controller.rb b/api/app/controllers/employees_controller.rb index d7221188f..49831f961 100644 --- a/api/app/controllers/employees_controller.rb +++ b/api/app/controllers/employees_controller.rb @@ -31,15 +31,9 @@ def create # POST /employees/upsert # POST /employees/upsert.json def upsert - now = Time.current - keys = %i[id group_id name student_id stool_test_id created_at updated_at] - - records = params.require(:employees).map do |emp| - attrs = ActionController::Parameters - .new(emp.to_unsafe_h) - .permit(*keys) - .to_h - .symbolize_keys + now = Time.current + records = employees_params.map do |attrs| + attrs[:id] ||= nil attrs[:created_at] ||= now attrs[:updated_at] = now attrs @@ -92,7 +86,8 @@ def employees_params ActionController::Parameters .new(emp.to_unsafe_h) .permit(:id, :group_id, :name, :student_id, :stool_test_id) - .to_h.symbolize_keys + .to_h + .symbolize_keys end end end From 2bad29291179f37341cbc5a0f41f4d32feb7e68a Mon Sep 17 00:00:00 2001 From: harata-t <22.t.harata.nutfes@gmail.com> Date: Sat, 31 May 2025 16:18:37 +0900 Subject: [PATCH 050/285] =?UTF-8?q?create=E3=81=A8update=E3=81=AE=E4=B8=A1?= =?UTF-8?q?=E6=96=B9=E3=82=92SQL=E7=B5=84=E3=81=BF=E7=AB=8B=E3=81=A6?= =?UTF-8?q?=E3=81=A6=E4=B8=80=E6=8B=AC=E5=8F=96=E5=BE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/app/controllers/employees_controller.rb | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/api/app/controllers/employees_controller.rb b/api/app/controllers/employees_controller.rb index 49831f961..03e981062 100644 --- a/api/app/controllers/employees_controller.rb +++ b/api/app/controllers/employees_controller.rb @@ -41,8 +41,25 @@ def upsert Employee.upsert_all(records) - processed_ids = records.map { |r| r[:id] }.compact - processed = Employee.where(id: processed_ids) + # より正確な検索条件を構築 + where_conditions = records.map do |attrs| + if attrs[:id].present? + # 既存レコードは id で絞る + "id = #{ActiveRecord::Base.connection.quote(attrs[:id])}" + else + # 新規レコードは、unique と想定しているカラムの組み合わせで絞る + <<~SQL.strip + ( + group_id = #{ActiveRecord::Base.connection.quote(attrs[:group_id])} AND + name = #{ActiveRecord::Base.connection.quote(attrs[:name])} AND + student_id = #{ActiveRecord::Base.connection.quote(attrs[:student_id])} AND + stool_test_id = #{ActiveRecord::Base.connection.quote(attrs[:stool_test_id])} + ) + SQL + end + end.join(" OR ") + + processed = Employee.where(where_conditions) render json: fmt(ok, processed) rescue ActiveRecord::StatementInvalid => e From a1e8e1608d48c3f7ca8c4be6cba09d975e5be870 Mon Sep 17 00:00:00 2001 From: hikahana <22.h.hanada.nutfes@gmail.com> Date: Sat, 31 May 2025 17:31:51 +0900 Subject: [PATCH 051/285] refactor: update useGetFoodProducts and simplify create/update hooks --- user/src/api/foodProdutApi.ts | 77 ++++------------------------------- 1 file changed, 9 insertions(+), 68 deletions(-) diff --git a/user/src/api/foodProdutApi.ts b/user/src/api/foodProdutApi.ts index f4e3f7900..0fafd73f4 100644 --- a/user/src/api/foodProdutApi.ts +++ b/user/src/api/foodProdutApi.ts @@ -35,10 +35,12 @@ export type UpdateFoodProductsRequest = { const API_ENDPOINTS = { FOOD_PRODUCTS: '/food_products', + FOOD_PRODUCTS_GROUP: '/food_products/group', + FOOD_PRODUCTS_UPSERT: '/food_products/upsert', }; -export const useGetFoodProducts = () => { - const endpoint = `${API_ENDPOINTS.FOOD_PRODUCTS}`; +export const useGetFoodProducts = (groupId: number | null) => { + const endpoint = `${API_ENDPOINTS.FOOD_PRODUCTS_GROUP}/${groupId}`; const { data, error, isLoading, mutate } = useAuthenticatedGet(endpoint); @@ -54,80 +56,19 @@ export const useGetFoodProducts = () => { * 単一作成用hook */ export const useCreateFoodProduct = () => { - const endpoint = `${API_ENDPOINTS.FOOD_PRODUCTS}`; - const { trigger, isMutating, error } = useAuthenticatedPost(endpoint); - - const createFoodProduct = async (foodProduct: FoodProduct) => { - return trigger({ body: foodProduct }); - }; - - return { - createFoodProduct, - isMutating, - error, - }; -}; - -/** - * 複数作成用hook - */ -export const useCreateFoodProducts = () => { - const endpoint = `${API_ENDPOINTS.FOOD_PRODUCTS}`; - const { trigger, isMutating, error } = useAuthenticatedPost(endpoint); - - const createFoodProducts = async (foodProducts: FoodProduct[]) => { - const request: CreateFoodProductsRequest = { - food_products: foodProducts, - }; - return trigger({ body: request }); - }; - - return { - createFoodProducts, - isMutating, - error, - }; + return useAuthenticatedPost(API_ENDPOINTS.FOOD_PRODUCTS); }; /** * 単一更新用hook */ -export const useUpdateFoodProduct = () => { - const endpoint = `${API_ENDPOINTS.FOOD_PRODUCTS}`; - const { trigger, isMutating, error } = useAuthenticatedPatch(endpoint); - - const updateFoodProduct = async ( - foodProduct: FoodProduct & { id: number } - ) => { - return trigger({ body: foodProduct }); - }; - - return { - updateFoodProduct, - isMutating, - error, - }; +export const useUpdateFoodProduct = (id: number | null) => { + return useAuthenticatedPatch(`${API_ENDPOINTS.FOOD_PRODUCTS}/${id}`); }; /** - * 複数更新用hook + * 複数(upsert_all)用hook */ export const useUpdateFoodProducts = () => { - const endpoint = `${API_ENDPOINTS.FOOD_PRODUCTS}`; - const { trigger, isMutating, error } = useAuthenticatedPatch(endpoint); - - const updateFoodProducts = async ( - foodProducts: (FoodProduct & { id: number })[] - ) => { - const request: UpdateFoodProductsRequest = { - food_products: foodProducts, - }; - return trigger({ body: request }); - }; - - return { - updateFoodProducts, - isMutating, - error, - }; + return useAuthenticatedPost(API_ENDPOINTS.FOOD_PRODUCTS_UPSERT); }; From aa4d86b931d32aecf64c23b8206763fcc2ba9f7a Mon Sep 17 00:00:00 2001 From: hikahana <22.h.hanada.nutfes@gmail.com> Date: Sat, 31 May 2025 17:31:58 +0900 Subject: [PATCH 052/285] feat: add upsert endpoint for food products in OAS documentation --- api/oas_docs/.docs | Bin 61664 -> 61664 bytes api/oas_docs/dist/oas_doc.yml | 22 ++++++++++++++++++++++ api/oas_docs/src/paths/food_product.yml | 22 ++++++++++++++++++++++ 3 files changed, 44 insertions(+) diff --git a/api/oas_docs/.docs b/api/oas_docs/.docs index 149803ff0a828a4c09b4caea99fd3783900c0ad4..95aa708eaaba1f24dd89f4a87302660afbf2d74d 100644 GIT binary patch delta 44883 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

v%IywyvhpPerJkviW>ISPi8;A3k8f?a;K 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 boqEm7Eqekc$2AA;CcOG*IDGg&DV+q}$D`R- delta 44883 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 Date: Sat, 31 May 2025 21:41:01 +0900 Subject: [PATCH 053/285] =?UTF-8?q?[fix]=20useGetVenueMap=E5=86=85?= =?UTF-8?q?=E3=81=AE=E5=A4=89=E6=95=B0=E5=90=8D=E3=82=92=E7=B0=A1=E7=B4=A0?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- user/src/api/venueMapApi.ts | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/user/src/api/venueMapApi.ts b/user/src/api/venueMapApi.ts index 3b5ef30ee..2a967889c 100644 --- a/user/src/api/venueMapApi.ts +++ b/user/src/api/venueMapApi.ts @@ -39,12 +39,8 @@ const API_ENDPOINTS = { export const useGetVenueMap = (groupId: number | null) => { const endpoint = groupId !== null ? `${API_ENDPOINTS.VENUE_MAPS}/group/${groupId}` : null; - const { - data: response, - error: apiError, - isLoading: apiIsLoading, - mutate: apiMutate, - } = useAuthenticatedGet>(endpoint); + const { data, error, isLoading, mutate } = + useAuthenticatedGet>(endpoint); // groupId が null の場合 if (groupId === null) { @@ -61,13 +57,13 @@ export const useGetVenueMap = (groupId: number | null) => { } // groupId が存在する場合の通常の処理 - const venueMap = response?.status.code === 200 ? response.data : null; + const venueMap = data?.status.code === 200 ? data.data : null; return { venueMap, - error: apiError, - isLoading: apiIsLoading, - mutateVenueMap: apiMutate, + error: error, + isLoading: isLoading, + mutateVenueMap: mutate, }; }; From ec5f17835dfbf6b9056449d18e1b506844e64b64 Mon Sep 17 00:00:00 2001 From: izuizu0424 <24.i.yasui.nutfes@gmail.com> Date: Sat, 31 May 2025 22:41:53 +0900 Subject: [PATCH 054/285] =?UTF-8?q?feat:bulk=5Fcreate,bulk=5Fupdate?= =?UTF-8?q?=E3=82=92upsert=5Fall=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controllers/purchase_lists_controller.rb | 17 +++++++++++------ api/config/routes.rb | 4 +--- user/src/api/purchaseListsApi.ts | 3 +-- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/api/app/controllers/purchase_lists_controller.rb b/api/app/controllers/purchase_lists_controller.rb index d3b50b79e..69d608b27 100644 --- a/api/app/controllers/purchase_lists_controller.rb +++ b/api/app/controllers/purchase_lists_controller.rb @@ -49,9 +49,14 @@ def get_by_group_id end end - # POST /purchase_lists/bulk_create - def bulk_create - created = PurchaseList.transaction do - purchase_list_bulk_params.map { |attrs| PurchaseList.create!(attrs) } - end - render json: fmt(created, created), s + # POST /purchase_lists/bulk_create +def bulk_create + result = PurchaseList.upsert_all( + purchase_list_bulk_params, + unique_by: [:group_id, :food_product_id, :shop_id, :fes_date_id] # 適宜ユニークキーを指定 + ) + render json: fmt(created, result) +rescue => e + render json: fmt(internal_server_error, [], e.message) +end + diff --git a/api/config/routes.rb b/api/config/routes.rb index 0477eb4e0..c95ebe5e2 100644 --- a/api/config/routes.rb +++ b/api/config/routes.rb @@ -45,9 +45,7 @@ resources :purchase_lists do collection do get 'group/:group_id', to: 'purchase_lists#get_by_group_id' - post 'bulk_create', to: 'purchase_lists#bulk_create' - put 'bulk_update', to: 'purchase_lists#bulk_update' - patch 'bulk_update', to: 'purchase_lists#bulk_update' + post 'upsert', to: 'purchase_lists#upsert_all' end end diff --git a/user/src/api/purchaseListsApi.ts b/user/src/api/purchaseListsApi.ts index a1938de05..99697a6cb 100644 --- a/user/src/api/purchaseListsApi.ts +++ b/user/src/api/purchaseListsApi.ts @@ -35,8 +35,7 @@ export type ApiResponse = { const API_ENDPOINTS = { PURCHASE_LIST: '/purchase_lists', PURCHASE_LIST_GROUP: '/purchase_lists/group', - PURCHASE_LIST_BULK_CREATE: '/purchase_lists/bulk_create', - PURCHASE_LIST_BULK_UPDATE: '/purchase_lists/bulk_update', + PURCHASE_LIST_UPSERT: '/purchase_lists/upsert', }; // グループIDで取得 From b2b88cd0e6c1e15769dbc3b794fa7d043bee9083 Mon Sep 17 00:00:00 2001 From: harata-t <22.t.harata.nutfes@gmail.com> Date: Sun, 1 Jun 2025 11:28:50 +0900 Subject: [PATCH 055/285] =?UTF-8?q?=E5=8F=96=E5=BE=97=E3=81=AE=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/app/controllers/employees_controller.rb | 24 ++++++++------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/api/app/controllers/employees_controller.rb b/api/app/controllers/employees_controller.rb index 03e981062..ef994aa40 100644 --- a/api/app/controllers/employees_controller.rb +++ b/api/app/controllers/employees_controller.rb @@ -42,24 +42,18 @@ def upsert Employee.upsert_all(records) # より正確な検索条件を構築 - where_conditions = records.map do |attrs| + processed = records.map do |attrs| if attrs[:id].present? - # 既存レコードは id で絞る - "id = #{ActiveRecord::Base.connection.quote(attrs[:id])}" + Employee.where(id: attrs[:id]) else - # 新規レコードは、unique と想定しているカラムの組み合わせで絞る - <<~SQL.strip - ( - group_id = #{ActiveRecord::Base.connection.quote(attrs[:group_id])} AND - name = #{ActiveRecord::Base.connection.quote(attrs[:name])} AND - student_id = #{ActiveRecord::Base.connection.quote(attrs[:student_id])} AND - stool_test_id = #{ActiveRecord::Base.connection.quote(attrs[:stool_test_id])} - ) - SQL + Employee.where( + group_id: attrs[:group_id], + name: attrs[:name], + student_id: attrs[:student_id], + stool_test_id: attrs[:stool_test_id] + ) end - end.join(" OR ") - - processed = Employee.where(where_conditions) + end.reduce { |acc, scope| acc.or(scope) } render json: fmt(ok, processed) rescue ActiveRecord::StatementInvalid => e From eb1d65d308618eeba07627e574f8800e481c0991 Mon Sep 17 00:00:00 2001 From: harata-t <22.t.harata.nutfes@gmail.com> Date: Sun, 1 Jun 2025 11:32:45 +0900 Subject: [PATCH 056/285] =?UTF-8?q?=E3=82=A8=E3=83=B3=E3=83=89=E3=83=9D?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=83=88=E3=82=92=E3=81=BE=E3=81=A8=E3=82=81?= =?UTF-8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- user/src/api/employeesApi.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/user/src/api/employeesApi.ts b/user/src/api/employeesApi.ts index 0dde931c0..56c5c30a5 100644 --- a/user/src/api/employeesApi.ts +++ b/user/src/api/employeesApi.ts @@ -8,6 +8,7 @@ import { ApiResponse } from './api'; const API_ENDPOINTS = { EMPLOYEES: '/employees', + EMPLOYEES_GROUP: '/employees/group', EMPLOYEES_UPSERT: '/employees/upsert', }; @@ -24,7 +25,7 @@ export type Employee = { export const useGetEmployees = (groupId: number | null) => { const endpoint = groupId !== null - ? `${API_ENDPOINTS.EMPLOYEES}/group/${groupId}` + ? `${API_ENDPOINTS.EMPLOYEES_GROUP}/${groupId}` : API_ENDPOINTS.EMPLOYEES; const { data, error, isLoading, mutate } = useAuthenticatedGet>(endpoint); From 4cfdc9e0a3f079ccc2898d634ed4d35b4edad1d1 Mon Sep 17 00:00:00 2001 From: TkymHrt <23.h.takayama.nutfes@gmail.com> Date: Sun, 1 Jun 2025 15:49:21 +0900 Subject: [PATCH 057/285] =?UTF-8?q?[feat]=20=E5=AE=9A=E6=95=B0=E3=80=81?= =?UTF-8?q?=E3=82=B9=E3=82=AD=E3=83=BC=E3=83=9E=E3=80=81=E5=9E=8B=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Applications/PurchaseLists/constants.ts | 81 +++++++++++++++++++ .../Applications/PurchaseLists/schema.ts | 48 +++++++++++ .../Applications/PurchaseLists/types.ts | 79 ++++++++++++++++++ 3 files changed, 208 insertions(+) create mode 100644 user/src/components/Applications/PurchaseLists/constants.ts create mode 100644 user/src/components/Applications/PurchaseLists/schema.ts create mode 100644 user/src/components/Applications/PurchaseLists/types.ts diff --git a/user/src/components/Applications/PurchaseLists/constants.ts b/user/src/components/Applications/PurchaseLists/constants.ts new file mode 100644 index 000000000..14ae992d7 --- /dev/null +++ b/user/src/components/Applications/PurchaseLists/constants.ts @@ -0,0 +1,81 @@ +import { RadioOption, ShopOption } from './types'; + +// 商品の種類 +export const FRESH_OPTIONS: RadioOption[] = [ + { id: 1, name: '生鮮品' }, + { id: 2, name: '加工品' }, +]; + +// 購入場所の選択肢 +export const SHOP_OPTIONS: ShopOption[] = [ + { id: 0, name: '選択してください' }, + { id: 1, name: 'アピタ長岡店' }, + { id: 2, name: 'イオン長岡店' }, + { id: 3, name: 'ウオロク 北山店' }, + { id: 4, name: 'ウオロク 長岡店' }, + { id: 5, name: 'カトウ食材' }, + { id: 6, name: '業務スーパー 中沢店' }, + { id: 7, name: 'サンマート' }, + { id: 8, name: 'スーパーセンタームサシ' }, + { id: 9, name: 'チャレンジャー 北長岡店' }, + { id: 10, name: 'ドン・キホーテ 長岡インター店' }, + { id: 11, name: 'ナルス 大島店' }, + { id: 12, name: 'なんじゃ村' }, + { id: 13, name: '原信 今朝白店' }, + { id: 14, name: '原信 古正寺店' }, + { id: 15, name: '原信 関原店' }, + { id: 16, name: '原信 寺島店' }, + { id: 17, name: '原信 来迎寺店' }, + { id: 18, name: 'PLANT-5 見附店' }, + { id: 19, name: '三和園茶舗' }, + { id: 20, name: '大和屋 本店' }, + { id: 21, name: 'やまや' }, + { id: 22, name: 'リカードコミュニケーション おぐまや' }, + { id: 23, name: '良食生活館 きたまち店' }, + { id: 24, name: '山ス流通サービス株式会社' }, + { id: 25, name: '菜加' }, + { id: 26, name: 'ひらせい 長岡ニュータウン店' }, + { id: 27, name: '紅屋重正' }, + { id: 28, name: 'ダイレックス喜多町店' }, + { id: 29, name: 'ネット注文' }, +]; + +// ネット注文のショップ名とID +export const NET_ORDER_SHOP_NAME = 'ネット注文'; +export const NET_ORDER_SHOP_ID = SHOP_OPTIONS.find( + (shop) => shop.name === NET_ORDER_SHOP_NAME +)?.id; + +// フォームフィールド名 +export const FIELD_NAMES = { + FOOD_PRODUCT_ID: 'foodProductId' as const, + ITEMS: 'items' as const, + IS_FRESH: 'isFresh' as const, + SHOP_ID: 'shopId' as const, + PURCHASE_DATE: 'purchaseDate' as const, + URL: 'url' as const, +}; + +// デフォルトの購入品アイテム +export const DEFAULT_BOUGHT_ITEM = { + id: undefined, + foodProductId: 0, + items: '', + isFresh: false, + shopId: 0, + purchaseDate: '', + url: '', +} as const; + +// バリデーションメッセージの定数 +export const VALIDATION_MESSAGES = { + REQUIRED_FOOD_PRODUCT: '販売品名を選択してください', + REQUIRED_SHOP: '購入場所を選択してください', + REQUIRED_ITEMS: '食材・材料を入力してください', + REQUIRED_PURCHASE_DATE: '購入日を入力してください', + INVALID_DATE_FORMAT: '日付はYYYY/MM/DD形式で入力してください', + INVALID_URL: '有効なURLを入力してください', + REQUIRED_URL_FOR_NET_ORDER: 'ネット注文の場合はURLを入力してください', + INVALID_NUMBER: '数値を入力してください', + MIN_ITEMS: '少なくとも1つの購入品を登録してください', +}; diff --git a/user/src/components/Applications/PurchaseLists/schema.ts b/user/src/components/Applications/PurchaseLists/schema.ts new file mode 100644 index 000000000..77f5f32ef --- /dev/null +++ b/user/src/components/Applications/PurchaseLists/schema.ts @@ -0,0 +1,48 @@ +import { z } from 'zod'; +import { NET_ORDER_SHOP_ID, VALIDATION_MESSAGES } from './constants'; + +export const purchaseListsSchema = z + .object({ + id: z.number().optional(), + foodProductId: z + .number({ invalid_type_error: VALIDATION_MESSAGES.INVALID_NUMBER }) + .min(1, { message: VALIDATION_MESSAGES.REQUIRED_FOOD_PRODUCT }), + shopId: z + .number({ invalid_type_error: VALIDATION_MESSAGES.INVALID_NUMBER }) + .min(1, { message: VALIDATION_MESSAGES.REQUIRED_SHOP }), + items: z.string().min(1, { message: VALIDATION_MESSAGES.REQUIRED_ITEMS }), + isFresh: z.boolean(), + purchaseDate: z + .string() + .min(1, { message: VALIDATION_MESSAGES.REQUIRED_PURCHASE_DATE }) + .regex(/^\d{4}\/\d{1,2}\/\d{1,2}$/, { + message: VALIDATION_MESSAGES.INVALID_DATE_FORMAT, + }), + url: z + .string() + .url({ message: VALIDATION_MESSAGES.INVALID_URL }) + .optional() + .or(z.literal('')), + }) + .superRefine((data, ctx) => { + if ( + data.shopId === NET_ORDER_SHOP_ID && + (!data.url || data.url.trim() === '') + ) { + ctx.addIssue({ + code: z.ZodIssueCode.custom, + message: VALIDATION_MESSAGES.REQUIRED_URL_FOR_NET_ORDER, + path: ['url'], + }); + } + }); + +export const PurchaseListsApplicationSchema = z.object({ + purchaseLists: z + .array(purchaseListsSchema) + .min(1, { message: VALIDATION_MESSAGES.MIN_ITEMS }), +}); + +export type PurchaseListsApplicationFormData = z.infer< + typeof PurchaseListsApplicationSchema +>; diff --git a/user/src/components/Applications/PurchaseLists/types.ts b/user/src/components/Applications/PurchaseLists/types.ts new file mode 100644 index 000000000..3c3db8bb4 --- /dev/null +++ b/user/src/components/Applications/PurchaseLists/types.ts @@ -0,0 +1,79 @@ +import { Control, FieldArrayWithId, UseFormReturn } from 'react-hook-form'; +import { PurchaseListsApplicationFormData } from './schema'; + +export type FieldType = 'text' | 'number' | 'date' | 'select' | 'radio'; + +export type RadioOption = { + id: number; + name: string; +}; + +export type ShopOption = { + id: number; + name: string; +}; + +export type FoodProductOption = { + id: number; + name: string; +}; + +export type PurchaseLists = { + id?: number; + foodProductId: number; + shopId: number; + items: string; + isFresh: boolean; + purchaseDate: string; + url?: string; +}; + +export type PurchaseListsField = + | 'foodProductId' + | 'shopId' + | 'items' + | 'isFresh' + | 'purchaseDate' + | 'url'; + +export interface PurchaseListsFormFieldProps { + name: PurchaseListsField; + label: string; + control: Control; + index: number; + required?: boolean; + note?: string; + getErrorMessage: (name: PurchaseListsField) => string | undefined; + fieldType: 'text' | 'select' | 'radio' | 'number' | 'date'; // 'date' を追加 + options?: { id: number | string; name: string }[]; + radioOptions?: RadioOption[]; +} + +export interface PurchaseListsFormProps { + index: number; + formMethods: UseFormReturn; + onRemove: (index: number) => void; + foodProductOptions: FoodProductOption[]; +} + +export interface PurchaseListsFormViewProps { + formMethods: UseFormReturn; + fields: FieldArrayWithId< + PurchaseListsApplicationFormData, + 'purchaseLists', + 'id' + >[]; + onRemove: (index: number) => void; + onAddItem: () => void; + isValid: boolean; + onSubmit: (data: PurchaseListsApplicationFormData) => void; + foodProductOptions: FoodProductOption[]; +} + +export interface PurchaseListsSummaryViewProps { + purchaseLists: PurchaseLists[]; + onEdit: () => void; + onDeleteItem: (id: number) => void; + isDeadline: boolean; + foodProductOptions: FoodProductOption[]; +} From 6eb9e0bd02361b37731fe1e0aa2d3348613031b6 Mon Sep 17 00:00:00 2001 From: TkymHrt <23.h.takayama.nutfes@gmail.com> Date: Sun, 1 Jun 2025 15:50:14 +0900 Subject: [PATCH 058/285] =?UTF-8?q?[feat]=20=E8=B3=BC=E5=85=A5=E5=93=81?= =?UTF-8?q?=E7=94=B3=E8=AB=8B=E6=A9=9F=E8=83=BD=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseLists/PurchaseLists.tsx | 85 ++++++ .../components/PurchaseListsDeadlineView.tsx | 32 ++ .../components/PurchaseListsForm.tsx | 286 ++++++++++++++++++ .../components/PurchaseListsFormView.tsx | 52 ++++ .../components/PurchaseListsSummaryView.tsx | 71 +++++ .../PurchaseLists/components/index.ts | 4 + .../Applications/PurchaseLists/hooks/index.ts | 3 + .../hooks/usePurchaseListsApplication.ts | 252 +++++++++++++++ .../hooks/usePurchaseListsDisplay.ts | 34 +++ .../hooks/usePurchaseListsForm.ts | 63 ++++ .../Applications/PurchaseLists/index.ts | 1 + .../PurchaseLists/schema/index.ts | 5 + 12 files changed, 888 insertions(+) create mode 100644 user/src/components/Applications/PurchaseLists/PurchaseLists.tsx create mode 100644 user/src/components/Applications/PurchaseLists/components/PurchaseListsDeadlineView.tsx create mode 100644 user/src/components/Applications/PurchaseLists/components/PurchaseListsForm.tsx create mode 100644 user/src/components/Applications/PurchaseLists/components/PurchaseListsFormView.tsx create mode 100644 user/src/components/Applications/PurchaseLists/components/PurchaseListsSummaryView.tsx create mode 100644 user/src/components/Applications/PurchaseLists/components/index.ts create mode 100644 user/src/components/Applications/PurchaseLists/hooks/index.ts create mode 100644 user/src/components/Applications/PurchaseLists/hooks/usePurchaseListsApplication.ts create mode 100644 user/src/components/Applications/PurchaseLists/hooks/usePurchaseListsDisplay.ts create mode 100644 user/src/components/Applications/PurchaseLists/hooks/usePurchaseListsForm.ts create mode 100644 user/src/components/Applications/PurchaseLists/index.ts create mode 100644 user/src/components/Applications/PurchaseLists/schema/index.ts diff --git a/user/src/components/Applications/PurchaseLists/PurchaseLists.tsx b/user/src/components/Applications/PurchaseLists/PurchaseLists.tsx new file mode 100644 index 000000000..2da382f3b --- /dev/null +++ b/user/src/components/Applications/PurchaseLists/PurchaseLists.tsx @@ -0,0 +1,85 @@ +import { FC } from 'react'; +import AccordionMenu from '@/components/AccordionMenu/AccordionMenu'; +import { + PurchaseListsDeadlineView, + PurchaseListsFormView, + PurchaseListsSummaryView, +} from './components'; +import { usePurchaseListsApplication, usePurchaseListsDisplay } from './hooks'; + +type PurchaseListsProps = { + isDeadline?: boolean; + isRegistered?: boolean | undefined; + groupId: number; +}; + +const PurchaseLists: FC = ({ + isDeadline = false, + isRegistered, + groupId, +}) => { + const { + state, + hasExisting, + purchaseLists, + purchaseListsForm, + handleFormSubmit, + handleDeleteItem, + prepareFormForEditing, + foodProductOptions, + } = usePurchaseListsApplication(groupId); + + const { isEditing } = state; + const { fields, addItem, removeItem, isValid, formMethods } = + purchaseListsForm; + + const { mode } = usePurchaseListsDisplay({ + hasExisting: hasExisting || false, + isEditing, + isDeadline, + }); + + let content; + switch (mode) { + case 'summary': + content = ( + + ); + break; + case 'deadline-unregistered': + content = ; + break; + case 'form': + default: + content = ( + + ); + } + + return ( + + {content} + + ); +}; + +export default PurchaseLists; diff --git a/user/src/components/Applications/PurchaseLists/components/PurchaseListsDeadlineView.tsx b/user/src/components/Applications/PurchaseLists/components/PurchaseListsDeadlineView.tsx new file mode 100644 index 000000000..ba8ae6216 --- /dev/null +++ b/user/src/components/Applications/PurchaseLists/components/PurchaseListsDeadlineView.tsx @@ -0,0 +1,32 @@ +import { FC } from 'react'; + +export const PurchaseListsDeadlineView: FC = () => { + return ( +

+ ); +}; diff --git a/user/src/components/Applications/PurchaseLists/components/PurchaseListsForm.tsx b/user/src/components/Applications/PurchaseLists/components/PurchaseListsForm.tsx new file mode 100644 index 000000000..76c27f90c --- /dev/null +++ b/user/src/components/Applications/PurchaseLists/components/PurchaseListsForm.tsx @@ -0,0 +1,286 @@ +import { FC } from 'react'; +import { Controller, FieldPath, useWatch } from 'react-hook-form'; +import Button from '@/components/Button/Button'; +import Selector from '@/components/Form/Selector/Selector'; +import TextBox from '@/components/Form/TextBox/TextBox'; +import FormContainer from '@/components/FormContainer/FormContainer'; +import { + FIELD_NAMES, + FRESH_OPTIONS, + NET_ORDER_SHOP_ID, + SHOP_OPTIONS, +} from '../constants'; +import { PurchaseListsApplicationFormData } from '../schema'; +import { + PurchaseListsField, + PurchaseListsFormFieldProps, + PurchaseListsFormProps, +} from '../types'; + +const PurchaseListsFormField: FC = ({ + name, + label, + control, + index, + required = false, + note, + getErrorMessage, + fieldType, + options, +}) => { + const fieldPath = + `purchaseLists.${index}.${name}` as FieldPath; + + const uniqueFieldName = fieldPath; + const displayLabel = label; + + // YYYY/MM/DD > YYYY-MM-DD + const formatDateForInput = (dateString: string) => { + if (!dateString) return ''; + const parts = dateString.split('/'); + if (parts.length === 3) { + return `${parts[0]}-${parts[1].padStart(2, '0')}-${parts[2].padStart( + 2, + '0' + )}`; + } + return dateString; + }; + + // YYYY-MM-DD > YYYY/MM/DD + const formatDateForStore = (dateString: string) => { + if (!dateString) return ''; + const parts = dateString.split('-'); + if (parts.length === 3) { + return `${parts[0]}/${Number(parts[1])}/${Number(parts[2])}`; + } + return dateString; + }; + + return ( +
+ { + if (fieldType === 'radio' && options) { + const currentValue = field.value ? '1' : '2'; + + return ( +
+
+

{displayLabel}

+ {required &&

※必須

} +
+ +
+ {options.map((option) => ( + + ))} +
+ + {note &&

{note}

} + {getErrorMessage(name) && ( +

{getErrorMessage(name)}

+ )} +
+ ); + } + + if (fieldType === 'select' && options) { + return ( + { + field.onChange(Number(value)); + }} + required={required} + note={note} + options={options.map((option) => ({ + ...option, + id: + typeof option.id === 'string' + ? Number(option.id) + : option.id, + }))} + error={getErrorMessage(name)} + /> + ); + } + + if (fieldType === 'date') { + return ( + { + field.onChange(formatDateForStore(value)); + }} + required={required} + note={note} + error={getErrorMessage(name)} + type="date" + /> + ); + } + + return ( + { + field.onChange( + fieldType === 'number' ? Number(value) || 0 : value + ); + }} + required={required} + note={note} + error={getErrorMessage(name)} + type={fieldType === 'number' ? 'number' : 'text'} + /> + ); + }} + /> +
+ ); +}; + +const PurchaseListsForm: FC = ({ + index, + formMethods, + onRemove, + foodProductOptions, +}) => { + const { control, formState, getValues } = formMethods; + + const getErrorMessage = (name: PurchaseListsField) => { + const fieldErrors = formState.errors.purchaseLists?.[index]; + return fieldErrors?.[name]?.message as string | undefined; + }; + + const netOrderShopId = NET_ORDER_SHOP_ID; + + const currentShopId = useWatch({ + control, + name: `purchaseLists.${index}.shopId`, + }); + const isNetOrder = currentShopId === netOrderShopId; + + return ( + +
+
+ + + + + + + + + + + {isNetOrder && ( + + )} + + {index > 0 && !getValues().purchaseLists[index]?.items && ( +
+ +
+ )} +
+
+
+ ); +}; + +export default PurchaseListsForm; diff --git a/user/src/components/Applications/PurchaseLists/components/PurchaseListsFormView.tsx b/user/src/components/Applications/PurchaseLists/components/PurchaseListsFormView.tsx new file mode 100644 index 000000000..7484f3f0f --- /dev/null +++ b/user/src/components/Applications/PurchaseLists/components/PurchaseListsFormView.tsx @@ -0,0 +1,52 @@ +import { FC } from 'react'; +import Button from '@/components/Button/Button'; +import { PurchaseListsFormViewProps } from '../types'; +import PurchaseListsForm from './PurchaseListsForm'; + +export const PurchaseListsFormView: FC = ({ + formMethods, + fields, + onRemove, + onAddItem, + isValid, + onSubmit, + foodProductOptions, +}) => { + const { handleSubmit } = formMethods; + + return ( +
+
+
+ {fields.map((field, index) => ( +
+ +
+ ))} +
+
+
+ + +
+
+
+
+ ); +}; diff --git a/user/src/components/Applications/PurchaseLists/components/PurchaseListsSummaryView.tsx b/user/src/components/Applications/PurchaseLists/components/PurchaseListsSummaryView.tsx new file mode 100644 index 000000000..a82954fe5 --- /dev/null +++ b/user/src/components/Applications/PurchaseLists/components/PurchaseListsSummaryView.tsx @@ -0,0 +1,71 @@ +import { FC } from 'react'; +import Button from '@/components/Button/Button'; +import FormList from '@/components/FormList/FormList'; +import { FormItem } from '@/components/FormList/type'; +import { SHOP_OPTIONS } from '../constants'; +import { PurchaseLists, PurchaseListsSummaryViewProps } from '../types'; + +export const createFormItemsForPurchaseLists = ( + item: PurchaseLists, + foodProductOptions: { id: number; name: string }[] +): FormItem[] => { + const items: FormItem[] = []; + + const shopName = + SHOP_OPTIONS.find((shop) => shop.id === item.shopId)?.name || '不明'; + const foodProductName = + foodProductOptions.find((product) => product.id === item.foodProductId) + ?.name || '不明'; + + items.push({ label: '販売品名', content: foodProductName }); + items.push({ label: '食材・材料', content: item.items }); + items.push({ + label: '商品の種類', + content: item.isFresh ? '生鮮品' : '加工品', + }); + items.push({ label: '購入場所', content: shopName }); + items.push({ label: '購入日', content: item.purchaseDate }); + + if (item.url) { + items.push({ label: 'URL', content: item.url }); + } + + return items; +}; + +export const PurchaseListsSummaryView: FC = ({ + purchaseLists, + onEdit, + onDeleteItem, + isDeadline, + foodProductOptions, +}) => { + return ( +
+ {purchaseLists.map((item, index) => ( +
+ onDeleteItem(item.id!) : undefined} + /> +
+ ))} + + {!isDeadline && ( +
+ +
+ )} +
+ ); +}; diff --git a/user/src/components/Applications/PurchaseLists/components/index.ts b/user/src/components/Applications/PurchaseLists/components/index.ts new file mode 100644 index 000000000..079686c07 --- /dev/null +++ b/user/src/components/Applications/PurchaseLists/components/index.ts @@ -0,0 +1,4 @@ +export * from './PurchaseListsDeadlineView'; +export { default as BoughtItemForm } from './PurchaseListsForm'; +export * from './PurchaseListsFormView'; +export * from './PurchaseListsSummaryView'; diff --git a/user/src/components/Applications/PurchaseLists/hooks/index.ts b/user/src/components/Applications/PurchaseLists/hooks/index.ts new file mode 100644 index 000000000..f6b9a45f2 --- /dev/null +++ b/user/src/components/Applications/PurchaseLists/hooks/index.ts @@ -0,0 +1,3 @@ +export { usePurchaseListsApplication } from './usePurchaseListsApplication'; +export { usePurchaseListsDisplay } from './usePurchaseListsDisplay'; +export { usePurchaseListsForm } from './usePurchaseListsForm'; diff --git a/user/src/components/Applications/PurchaseLists/hooks/usePurchaseListsApplication.ts b/user/src/components/Applications/PurchaseLists/hooks/usePurchaseListsApplication.ts new file mode 100644 index 000000000..efa0fdebf --- /dev/null +++ b/user/src/components/Applications/PurchaseLists/hooks/usePurchaseListsApplication.ts @@ -0,0 +1,252 @@ +import { useCallback, useEffect, useMemo, useState } from 'react'; +// import { useGetPurchaseListsByGroupId } from '@/api/purchaseListsApi'; +import { toast } from 'react-toastify'; +import { PurchaseListsApplicationFormData } from '../schema'; +import { FoodProductOption, PurchaseLists } from '../types'; +import { usePurchaseListsForm } from './usePurchaseListsForm'; + +interface UsePurchaseListsApplicationState { + isEditing: boolean; + submitError: string | null; + isSubmitted: boolean; +} + +// モックデータ管理のためのローカルストレージキー +const getStorageKey = (groupId: number) => `purchase_lists_group_${groupId}`; + +// モックAPIレスポンス型 +type MockPurchaseListResponse = { + id: number; + groupId: number; + foodProductId: number; + shopId: number; + items: string; + isFresh: boolean; + purchaseDate: string; + url?: string; +}; + +// モック API フック +const useMockGetPurchaseListsByGroupId = (groupId: number) => { + const [data, setData] = useState( + undefined + ); + const [isLoading, setIsLoading] = useState(true); + const [error, setError] = useState(null); + + const loadData = useCallback(() => { + try { + setIsLoading(true); + const storageKey = getStorageKey(groupId); + const storedData = localStorage.getItem(storageKey); + if (storedData) { + const parsedData = JSON.parse(storedData) as MockPurchaseListResponse[]; + setData(parsedData); + } else { + setData([]); + } + setError(null); + } catch (err) { + setError( + err instanceof Error ? err : new Error('データの読み込みに失敗しました') + ); + setData([]); + } finally { + setIsLoading(false); + } + }, [groupId]); + + useEffect(() => { + loadData(); + }, [loadData]); + + const mutatePurchaseLists = useCallback(() => { + loadData(); + }, [loadData]); + + return { + purchaseLists: data, + isLoading, + error, + mutatePurchaseLists, + }; +}; + +export const usePurchaseListsApplication = (groupId: number) => { + const [state, setState] = useState({ + isEditing: false, + submitError: null, + isSubmitted: false, + }); + + // モック API フック + const { + purchaseLists: apiPurchaseLists, + isLoading, + error, + mutatePurchaseLists, + } = useMockGetPurchaseListsByGroupId(groupId); + + // フォーム管理 + const purchaseListsForm = usePurchaseListsForm(); + + // 販売品オプション(将来的にはAPIから取得) + const foodProductOptions: FoodProductOption[] = useMemo( + () => [ + { id: 0, name: '選択してください' }, + { id: 1, name: 'からあげ(仮)' }, + { id: 2, name: 'フランクフルト(仮)' }, + { id: 3, name: 'チョコバナナ(仮)' }, + { id: 4, name: 'たこ焼き(仮)' }, + { id: 5, name: 'かき氷(仮)' }, + ], + [] + ); + + const hasExisting = useMemo(() => { + return apiPurchaseLists && apiPurchaseLists.length > 0; + }, [apiPurchaseLists]); + + useEffect(() => { + if (!isLoading && apiPurchaseLists !== undefined) { + if (hasExisting) { + // 既存データがある場合、表示モード + setState((prev) => ({ + ...prev, + isEditing: false, + isSubmitted: true, + })); + } else { + // 新規申請の場合、編集モード + setState((prev) => ({ + ...prev, + isEditing: true, + isSubmitted: false, + })); + } + } + }, [isLoading, hasExisting, apiPurchaseLists]); + + // 未登録データの有無 + const hasUnregistered = false; + + const purchaseLists: PurchaseLists[] = useMemo(() => { + if (!apiPurchaseLists) return []; + return apiPurchaseLists.map((item: MockPurchaseListResponse) => ({ + id: item.id, + foodProductId: item.foodProductId, + shopId: item.shopId, + items: item.items, + isFresh: item.isFresh, + purchaseDate: item.purchaseDate, + url: item.url || '', + })); + }, [apiPurchaseLists]); + + // ローカルストレージにデータを保存 + const saveToStorage = useCallback( + (data: MockPurchaseListResponse[]) => { + const storageKey = getStorageKey(groupId); + localStorage.setItem(storageKey, JSON.stringify(data)); + }, + [groupId] + ); + + // フォーム送信ハンドラ + const handleFormSubmit = useCallback( + async (data: PurchaseListsApplicationFormData) => { + setState((prev) => ({ ...prev, submitError: null })); + + try { + // モックデータとして保存 + const mockData: MockPurchaseListResponse[] = data.purchaseLists.map( + (item, index) => ({ + id: item.id || Date.now() + index, + groupId: groupId, + foodProductId: item.foodProductId, + shopId: item.shopId, + items: item.items, + isFresh: item.isFresh, + purchaseDate: item.purchaseDate, + url: item.url, + }) + ); + + saveToStorage(mockData); + toast.success('購入品申請が登録されました'); + + setState((prev) => ({ + ...prev, + isEditing: false, + isSubmitted: true, + })); + + // 最新データを再取得 + mutatePurchaseLists(); + } catch (error) { + const errorMessage = + error instanceof Error ? error.message : '登録に失敗しました'; + setState((prev) => ({ ...prev, submitError: errorMessage })); + toast.error(errorMessage); + } + }, + [groupId, saveToStorage, mutatePurchaseLists] + ); + + // 購入品削除ハンドラ + const handleDeleteItem = useCallback( + async (id: number) => { + try { + const currentData = apiPurchaseLists || []; + const updatedData = currentData.filter((item) => item.id !== id); + saveToStorage(updatedData); + toast.success('購入品が削除されました'); + mutatePurchaseLists(); + } catch (error) { + const errorMessage = + error instanceof Error ? error.message : '削除に失敗しました'; + toast.error(errorMessage); + } + }, + [apiPurchaseLists, saveToStorage, mutatePurchaseLists] + ); + + // 編集モードへの切り替え + const prepareFormForEditing = useCallback(() => { + if (hasExisting) { + // 既存データでフォームを初期化 + const formData: PurchaseListsApplicationFormData = { + purchaseLists: purchaseLists, + }; + purchaseListsForm.initializeForm(formData); + } + setState((prev) => ({ + ...prev, + isEditing: true, + })); + }, [hasExisting, purchaseLists, purchaseListsForm]); + + // 送信完了 + const completeSubmission = useCallback(() => { + setState((prev) => ({ + ...prev, + isSubmitted: true, + isEditing: false, + })); + }, []); + + return { + state, + hasExisting, + hasUnregistered, + purchaseLists, + purchaseListsForm, + handleFormSubmit, + handleDeleteItem, + prepareFormForEditing, + completeSubmission, + isLoading, + error, + foodProductOptions, + }; +}; diff --git a/user/src/components/Applications/PurchaseLists/hooks/usePurchaseListsDisplay.ts b/user/src/components/Applications/PurchaseLists/hooks/usePurchaseListsDisplay.ts new file mode 100644 index 000000000..5c8c2fafe --- /dev/null +++ b/user/src/components/Applications/PurchaseLists/hooks/usePurchaseListsDisplay.ts @@ -0,0 +1,34 @@ +type DisplayMode = 'form' | 'summary' | 'deadline-unregistered'; + +interface UsePurchaseListsDisplayProps { + hasExisting: boolean; + isEditing: boolean; + isDeadline?: boolean; +} + +export const usePurchaseListsDisplay = ({ + hasExisting, + isEditing, + isDeadline = false, +}: UsePurchaseListsDisplayProps) => { + const mode: DisplayMode = (() => { + // 締切期限後で未登録の場合 + if (isDeadline && !hasExisting) { + return 'deadline-unregistered'; + } + + if (isEditing) { + return 'form'; + } + + if (hasExisting) { + return 'summary'; + } + + return 'form'; + })(); + + return { + mode, + }; +}; diff --git a/user/src/components/Applications/PurchaseLists/hooks/usePurchaseListsForm.ts b/user/src/components/Applications/PurchaseLists/hooks/usePurchaseListsForm.ts new file mode 100644 index 000000000..2511baeb6 --- /dev/null +++ b/user/src/components/Applications/PurchaseLists/hooks/usePurchaseListsForm.ts @@ -0,0 +1,63 @@ +import { zodResolver } from '@hookform/resolvers/zod'; +import { useFieldArray, useForm } from 'react-hook-form'; +import { DEFAULT_BOUGHT_ITEM } from '../constants'; +import { + PurchaseListsApplicationFormData, + PurchaseListsApplicationSchema, +} from '../schema'; + +export const usePurchaseListsForm = () => { + // フォームの初期化 + const formMethods = useForm({ + resolver: zodResolver(PurchaseListsApplicationSchema), + defaultValues: { + purchaseLists: [DEFAULT_BOUGHT_ITEM], + }, + mode: 'onChange', + }); + + const { control, formState, reset } = formMethods; + + // フィールド配列の管理 + const { fields, append, remove } = useFieldArray({ + control, + name: 'purchaseLists', + }); + + // 購入品を追加 + const addItem = () => { + append(DEFAULT_BOUGHT_ITEM); + }; + + // 購入品を削除 + const removeItem = (index: number) => { + if (fields.length > 1) { + remove(index); + } + }; + + // フォームの妥当性 + const isValid = formState.isValid; + + // フォームをリセット + const resetForm = () => { + reset({ + purchaseLists: [DEFAULT_BOUGHT_ITEM], + }); + }; + + // 既存データでフォームを初期化 + const initializeForm = (data: PurchaseListsApplicationFormData) => { + reset(data); + }; + + return { + formMethods, + fields, + addItem, + removeItem, + isValid, + resetForm, + initializeForm, + }; +}; diff --git a/user/src/components/Applications/PurchaseLists/index.ts b/user/src/components/Applications/PurchaseLists/index.ts new file mode 100644 index 000000000..a8d81d517 --- /dev/null +++ b/user/src/components/Applications/PurchaseLists/index.ts @@ -0,0 +1 @@ +export { default } from './PurchaseLists'; diff --git a/user/src/components/Applications/PurchaseLists/schema/index.ts b/user/src/components/Applications/PurchaseLists/schema/index.ts new file mode 100644 index 000000000..1d94c7fce --- /dev/null +++ b/user/src/components/Applications/PurchaseLists/schema/index.ts @@ -0,0 +1,5 @@ +export { + PurchaseListsApplicationSchema, + purchaseListsSchema, + type PurchaseListsApplicationFormData, +} from '../schema'; From b605709a7ccba6a0b6c0d25323de11a6c040c688 Mon Sep 17 00:00:00 2001 From: TkymHrt <23.h.takayama.nutfes@gmail.com> Date: Sun, 1 Jun 2025 15:50:36 +0900 Subject: [PATCH 059/285] =?UTF-8?q?[feat]=20Storybook=E3=81=AE=E4=BD=9C?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseLists/PurchaseLists.stories.tsx | 433 ++++++++++++++++++ 1 file changed, 433 insertions(+) create mode 100644 user/src/components/Applications/PurchaseLists/PurchaseLists.stories.tsx diff --git a/user/src/components/Applications/PurchaseLists/PurchaseLists.stories.tsx b/user/src/components/Applications/PurchaseLists/PurchaseLists.stories.tsx new file mode 100644 index 000000000..ddf044bc3 --- /dev/null +++ b/user/src/components/Applications/PurchaseLists/PurchaseLists.stories.tsx @@ -0,0 +1,433 @@ +import '@globals'; +import { Meta, StoryObj } from '@storybook/react'; +import { expect, userEvent, within } from '@storybook/test'; +import PurchaseLists from './PurchaseLists'; + +// モックデータ用の型定義 +type MockPurchaseListResponse = { + id: number; + groupId: number; + foodProductId: number; + shopId: number; + items: string; + isFresh: boolean; + purchaseDate: string; + url?: string; +}; + +// ストーリー用のモックデータを準備 +const getStorageKey = (groupId: number) => `purchase_lists_group_${groupId}`; + +const mockDataSetter = (groupId: number, data: MockPurchaseListResponse[]) => { + // Storybookではlocalstorageが利用可能 + if (typeof window !== 'undefined') { + localStorage.setItem(getStorageKey(groupId), JSON.stringify(data)); + } +}; + +const clearMockData = (groupId: number) => { + if (typeof window !== 'undefined') { + localStorage.removeItem(getStorageKey(groupId)); + } +}; + +export default { + title: 'Components/PurchaseLists', + tags: ['autodocs'], + component: PurchaseLists, + parameters: { + docs: { + source: { + type: 'auto', + }, + description: { + component: + '購入品申請コンポーネント - 購入品の申請データを管理します。フォーム入力、データ表示、編集機能を提供します。', + }, + }, + layout: 'padded', + }, + argTypes: { + isDeadline: { + control: 'boolean', + description: '締切期限を過ぎているかどうか(編集不可状態)', + table: { + defaultValue: { summary: 'false' }, + }, + }, + isRegistered: { + control: 'boolean', + description: '申請が登録済みかどうか(既存データの有無)', + table: { + defaultValue: { summary: 'undefined' }, + }, + }, + groupId: { + control: 'number', + description: 'グループID(データ識別用)', + table: { + defaultValue: { summary: '1' }, + }, + }, + }, + decorators: [ + (Story, context) => { + // context.args の型を明示的に示す (Storybookが型推論できる場合が多いが、より安全に) + // PurchaseListsPropsにgroupIdが含まれることを想定 + const { groupId } = context.args as { groupId?: number }; // groupIdはオプショナルかもしれないので ? を追加 + + // ストーリー開始時にモックデータをクリア + if (typeof groupId === 'number') { + clearMockData(groupId); + } + + return ; + }, + ], +} as Meta; + +type Story = StoryObj; + +// 新規申請(フォーム表示) +export const NewApplication: Story = { + args: { + groupId: 1, + isDeadline: false, + isRegistered: false, + }, + parameters: { + docs: { + description: { + story: + 'デフォルト状態の購入品申請コンポーネント。新規申請フォームが表示され、購入品の追加や削除が可能です。', + }, + }, + }, + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + + // フォームが表示されていることを確認 + expect(canvas.getByText('購入品の追加')).toBeInTheDocument(); + expect(canvas.getByText('登録')).toBeInTheDocument(); + }, +}; + +// 既存データありの状態(サマリー表示) +export const WithExistingData: Story = { + args: { + groupId: 2, + isDeadline: false, + isRegistered: true, + }, + parameters: { + docs: { + description: { + story: + '申請が登録済みの状態。既存の申請データをサマリー形式で表示し、編集や削除が可能です。', + }, + }, + }, + decorators: [ + (Story, context) => { + const { groupId } = context.args as { groupId: number }; // このストーリーではgroupIdが必須と想定 + + const mockData: MockPurchaseListResponse[] = [ + { + id: 1, + groupId: groupId, + foodProductId: 1, + shopId: 1, + items: 'トマト、玉ねぎ、人参', + isFresh: true, + purchaseDate: '2025/06/15', + url: '', + }, + { + id: 2, + groupId: groupId, + foodProductId: 2, + shopId: 29, + items: '調味料セット、油', + isFresh: false, + purchaseDate: '2025/06/10', + url: 'https://example.com/seasoning-set', + }, + ]; + + // groupIdが数値であることを確認してからモックデータを設定 + if (typeof groupId === 'number') { + mockDataSetter(groupId, mockData); + } + + return ; + }, + ], +}; + +// 複数の購入品がある複雑なケース +export const ComplexData: Story = { + args: { + groupId: 3, + isDeadline: false, + isRegistered: true, + }, + parameters: { + docs: { + description: { + story: + '複数の購入品データがある状態。生鮮品と加工品、ネット注文と店舗購入が混在しています。', + }, + }, + }, + decorators: [ + (Story, context) => { + const { groupId } = context.args as { groupId: number }; // このストーリーではgroupIdが必須と想定 + + const mockData: MockPurchaseListResponse[] = [ + { + id: 1, + groupId: groupId, + foodProductId: 1, + shopId: 1, + items: '新鮮な野菜セット(キャベツ、レタス、トマト)', + isFresh: true, + purchaseDate: '2025/06/20', + url: '', + }, + { + id: 2, + groupId: groupId, + foodProductId: 2, + shopId: 29, + items: '業務用調味料、冷凍食品', + isFresh: false, + purchaseDate: '2025/06/18', + url: 'https://business-supply.example.com/order/12345', + }, + { + id: 3, + groupId: groupId, + foodProductId: 4, + shopId: 14, + items: '肉類(鶏肉、豚肉)', + isFresh: true, + purchaseDate: '2025/06/19', + url: '', + }, + ]; + + if (typeof groupId === 'number') { + mockDataSetter(groupId, mockData); + } + + return ; + }, + ], +}; + +// 締切期限後の編集不可状態 +export const AfterDeadline: Story = { + args: { + groupId: 4, + isDeadline: true, + isRegistered: true, + }, + parameters: { + docs: { + description: { + story: + '締切期限を過ぎた状態。データは表示されますが編集不可で、修正ボタンなどは表示されません。', + }, + }, + }, + decorators: [ + (Story, context) => { + const { groupId } = context.args as { groupId: number }; // このストーリーではgroupIdが必須と想定 + + const mockData: MockPurchaseListResponse[] = [ + { + id: 1, + groupId: groupId, + foodProductId: 1, + shopId: 2, + items: '最終確定済みの食材リスト', + isFresh: true, + purchaseDate: '2025/06/01', + url: '', + }, + ]; + + if (typeof groupId === 'number') { + mockDataSetter(groupId, mockData); + } + + return ; + }, + ], + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + + // 編集ボタンが表示されていないことを確認 + expect(canvas.queryByText('修正')).not.toBeInTheDocument(); + }, +}; + +// 締切期限後で未登録の状態 +export const DeadlineUnregistered: Story = { + args: { + groupId: 5, + isDeadline: true, + isRegistered: false, + }, + parameters: { + docs: { + description: { + story: '締切期限を過ぎて未登録の状態。新規申請はできません。', + }, + }, + }, + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + + // 締切期限メッセージが表示されていることを確認 + expect(canvas.getByText('申請期限が過ぎています')).toBeInTheDocument(); + expect( + canvas.getByText( + '購入品申請の締切期限が過ぎているため、新規申請はできません。' + ) + ).toBeInTheDocument(); + + // フォームの要素が表示されていないことを確認 + expect(canvas.queryByText('購入品の追加')).not.toBeInTheDocument(); + expect(canvas.queryByText('登録')).not.toBeInTheDocument(); + }, +}; + +// フォーム操作のインタラクションテスト +export const FormInteraction: Story = { + args: { + groupId: 6, + isDeadline: false, + isRegistered: false, + }, + parameters: { + docs: { + description: { + story: + 'フォーム操作のテスト。購入品の追加、削除、入力などのインタラクションをテストします。', + }, + }, + }, + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + const user = userEvent.setup(); + + // 初期状態: 1アイテム。最初の項目は削除ボタンは表示されない + expect(canvas.getAllByText('販売品名')).toHaveLength(1); + expect(canvas.queryAllByText('削除')).toHaveLength(0); + + // 「購入品の追加」ボタンをクリック + const addButton = canvas.getByText('購入品の追加'); + await user.click(addButton); + + // アイテムが2つに増え、「販売品名」のラベルも2つになる + // UIの更新を待つ。より堅牢な方法はwaitForなどを使用することです。 + await new Promise((resolve) => setTimeout(resolve, 100)); + expect(canvas.getAllByText('販売品名')).toHaveLength(2); + + // 2番目の項目に削除ボタンが表示されるかチェック + // 注: 元のコードでは、項目が空の場合にのみ削除ボタンが表示されるとコメントがありました。 + // このロジックが正しいか、コンポーネントの実装に依存します。 + const deleteButtons = canvas.queryAllByText('削除'); + if (deleteButtons.length > 0) { + // 削除ボタンが見つかれば、最初の削除ボタンをクリックする + // (複数の削除ボタンがある場合、意図したボタンをより正確に特定する必要があるかもしれません) + await user.click(deleteButtons[0]); + // UIの更新を待つ。 + await new Promise((resolve) => setTimeout(resolve, 100)); + + // アイテムが1つに戻る + expect(canvas.getAllByText('販売品名')).toHaveLength(1); + } else { + // console.info('削除ボタンが見つかりませんでした。これは仕様の可能性があります。'); + // lintエラー(no-console)を避けるためコメントアウト。必要に応じてロギング方法を検討してください。 + } + + // 最初の項目の「選択した料理に使用した食材・使用する材料」フィールドを探して入力 + try { + const materialLabel = canvas.getByText( + '選択した料理に使用した食材・使用する材料' + ); + // DOM構造に依存した探索は変更に弱い可能性があります。getByLabelTextなどの利用も検討してください。 + const inputContainer = materialLabel.closest('div')?.parentElement; + if (inputContainer) { + const input = within(inputContainer).getByRole('textbox'); + await user.type(input, 'テスト食材'); + expect(input).toHaveValue('テスト食材'); + } else { + // inputContainerが見つからない場合のエラーハンドリング + // (テストを失敗させるか、特定のログを出すなど) + throw new Error('入力フィールドのコンテナが見つかりませんでした。'); + } + } catch (e) { + // console.error('テキストフィールドの操作中にエラーが発生しました:', e); + // lintエラー(no-console)を避けるためコメントアウト。 + // 要素が見つからない場合や操作に失敗した場合はテストを失敗させるためにエラーを再スローします。 + throw e; + } + }, +}; + +// エラー状態のテスト +export const ValidationErrors: Story = { + args: { + groupId: 7, + isDeadline: false, + isRegistered: false, + }, + parameters: { + docs: { + description: { + story: + 'バリデーションエラーの状態をテストします。必須項目の未入力など。', + }, + }, + }, + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + const user = userEvent.setup(); + + // 何も入力せずに登録ボタンをクリックしてバリデーションエラーを発生させる + const submitButton = canvas.getByText('登録'); + await user.click(submitButton); + + // バリデーションエラーが表示されるまで少し待つ。 + // UIの更新を待つ。より堅牢な方法はwaitForなどを使用することです。 + await new Promise((resolve) => setTimeout(resolve, 300)); + + const errorTexts = [ + '販売品名を選択してください', + '購入場所を選択してください', + '食材・材料を入力してください', + '購入日を入力してください', + ]; + + let foundErrors = false; + for (const errorText of errorTexts) { + // queryByText は要素が見つからない場合 null を返す (エラーはスローしない) + if (canvas.queryByText(errorText)) { + foundErrors = true; + break; + } + } + + // 少なくとも1つのエラーメッセージが表示されていることを確認 + expect(foundErrors).toBe(true); + // 元のコードにあったtry...catchは、このアサーションがテストの主要な検証であるため、 + // 失敗した場合はテスト全体が失敗すべきなので削除しました。 + // catch (e) { + // console.error('バリデーションエラーの検出に失敗しました', e); + // throw e; + // } + }, +}; From 74764c3c3e6314fa722dc071a85f3939aa1934fe Mon Sep 17 00:00:00 2001 From: TkymHrt <23.h.takayama.nutfes@gmail.com> Date: Sun, 1 Jun 2025 15:57:08 +0900 Subject: [PATCH 060/285] =?UTF-8?q?[refactor]=20=E4=B8=8D=E8=A6=81?= =?UTF-8?q?=E3=81=AA=E3=83=86=E3=82=B9=E3=83=88=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseLists/PurchaseLists.stories.tsx | 131 +----------------- 1 file changed, 1 insertion(+), 130 deletions(-) diff --git a/user/src/components/Applications/PurchaseLists/PurchaseLists.stories.tsx b/user/src/components/Applications/PurchaseLists/PurchaseLists.stories.tsx index ddf044bc3..f09c2125f 100644 --- a/user/src/components/Applications/PurchaseLists/PurchaseLists.stories.tsx +++ b/user/src/components/Applications/PurchaseLists/PurchaseLists.stories.tsx @@ -1,6 +1,6 @@ import '@globals'; import { Meta, StoryObj } from '@storybook/react'; -import { expect, userEvent, within } from '@storybook/test'; +import { expect, within } from '@storybook/test'; import PurchaseLists from './PurchaseLists'; // モックデータ用の型定義 @@ -302,132 +302,3 @@ export const DeadlineUnregistered: Story = { expect(canvas.queryByText('登録')).not.toBeInTheDocument(); }, }; - -// フォーム操作のインタラクションテスト -export const FormInteraction: Story = { - args: { - groupId: 6, - isDeadline: false, - isRegistered: false, - }, - parameters: { - docs: { - description: { - story: - 'フォーム操作のテスト。購入品の追加、削除、入力などのインタラクションをテストします。', - }, - }, - }, - play: async ({ canvasElement }) => { - const canvas = within(canvasElement); - const user = userEvent.setup(); - - // 初期状態: 1アイテム。最初の項目は削除ボタンは表示されない - expect(canvas.getAllByText('販売品名')).toHaveLength(1); - expect(canvas.queryAllByText('削除')).toHaveLength(0); - - // 「購入品の追加」ボタンをクリック - const addButton = canvas.getByText('購入品の追加'); - await user.click(addButton); - - // アイテムが2つに増え、「販売品名」のラベルも2つになる - // UIの更新を待つ。より堅牢な方法はwaitForなどを使用することです。 - await new Promise((resolve) => setTimeout(resolve, 100)); - expect(canvas.getAllByText('販売品名')).toHaveLength(2); - - // 2番目の項目に削除ボタンが表示されるかチェック - // 注: 元のコードでは、項目が空の場合にのみ削除ボタンが表示されるとコメントがありました。 - // このロジックが正しいか、コンポーネントの実装に依存します。 - const deleteButtons = canvas.queryAllByText('削除'); - if (deleteButtons.length > 0) { - // 削除ボタンが見つかれば、最初の削除ボタンをクリックする - // (複数の削除ボタンがある場合、意図したボタンをより正確に特定する必要があるかもしれません) - await user.click(deleteButtons[0]); - // UIの更新を待つ。 - await new Promise((resolve) => setTimeout(resolve, 100)); - - // アイテムが1つに戻る - expect(canvas.getAllByText('販売品名')).toHaveLength(1); - } else { - // console.info('削除ボタンが見つかりませんでした。これは仕様の可能性があります。'); - // lintエラー(no-console)を避けるためコメントアウト。必要に応じてロギング方法を検討してください。 - } - - // 最初の項目の「選択した料理に使用した食材・使用する材料」フィールドを探して入力 - try { - const materialLabel = canvas.getByText( - '選択した料理に使用した食材・使用する材料' - ); - // DOM構造に依存した探索は変更に弱い可能性があります。getByLabelTextなどの利用も検討してください。 - const inputContainer = materialLabel.closest('div')?.parentElement; - if (inputContainer) { - const input = within(inputContainer).getByRole('textbox'); - await user.type(input, 'テスト食材'); - expect(input).toHaveValue('テスト食材'); - } else { - // inputContainerが見つからない場合のエラーハンドリング - // (テストを失敗させるか、特定のログを出すなど) - throw new Error('入力フィールドのコンテナが見つかりませんでした。'); - } - } catch (e) { - // console.error('テキストフィールドの操作中にエラーが発生しました:', e); - // lintエラー(no-console)を避けるためコメントアウト。 - // 要素が見つからない場合や操作に失敗した場合はテストを失敗させるためにエラーを再スローします。 - throw e; - } - }, -}; - -// エラー状態のテスト -export const ValidationErrors: Story = { - args: { - groupId: 7, - isDeadline: false, - isRegistered: false, - }, - parameters: { - docs: { - description: { - story: - 'バリデーションエラーの状態をテストします。必須項目の未入力など。', - }, - }, - }, - play: async ({ canvasElement }) => { - const canvas = within(canvasElement); - const user = userEvent.setup(); - - // 何も入力せずに登録ボタンをクリックしてバリデーションエラーを発生させる - const submitButton = canvas.getByText('登録'); - await user.click(submitButton); - - // バリデーションエラーが表示されるまで少し待つ。 - // UIの更新を待つ。より堅牢な方法はwaitForなどを使用することです。 - await new Promise((resolve) => setTimeout(resolve, 300)); - - const errorTexts = [ - '販売品名を選択してください', - '購入場所を選択してください', - '食材・材料を入力してください', - '購入日を入力してください', - ]; - - let foundErrors = false; - for (const errorText of errorTexts) { - // queryByText は要素が見つからない場合 null を返す (エラーはスローしない) - if (canvas.queryByText(errorText)) { - foundErrors = true; - break; - } - } - - // 少なくとも1つのエラーメッセージが表示されていることを確認 - expect(foundErrors).toBe(true); - // 元のコードにあったtry...catchは、このアサーションがテストの主要な検証であるため、 - // 失敗した場合はテスト全体が失敗すべきなので削除しました。 - // catch (e) { - // console.error('バリデーションエラーの検出に失敗しました', e); - // throw e; - // } - }, -}; From d9f5146ae23f496ec8a4a277a53861476ee15129 Mon Sep 17 00:00:00 2001 From: TkymHrt <23.h.takayama.nutfes@gmail.com> Date: Sun, 1 Jun 2025 16:45:12 +0900 Subject: [PATCH 061/285] =?UTF-8?q?[refactor]=20=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=B3=E3=83=BC=E3=83=89=E3=82=92=E5=89=8A=E9=99=A4?= =?UTF-8?q?=E3=81=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PurchaseLists/PurchaseLists.stories.tsx | 40 ++----------------- 1 file changed, 4 insertions(+), 36 deletions(-) diff --git a/user/src/components/Applications/PurchaseLists/PurchaseLists.stories.tsx b/user/src/components/Applications/PurchaseLists/PurchaseLists.stories.tsx index f09c2125f..e4f524bcd 100644 --- a/user/src/components/Applications/PurchaseLists/PurchaseLists.stories.tsx +++ b/user/src/components/Applications/PurchaseLists/PurchaseLists.stories.tsx @@ -1,6 +1,5 @@ import '@globals'; import { Meta, StoryObj } from '@storybook/react'; -import { expect, within } from '@storybook/test'; import PurchaseLists from './PurchaseLists'; // モックデータ用の型定義 @@ -72,9 +71,7 @@ export default { }, decorators: [ (Story, context) => { - // context.args の型を明示的に示す (Storybookが型推論できる場合が多いが、より安全に) - // PurchaseListsPropsにgroupIdが含まれることを想定 - const { groupId } = context.args as { groupId?: number }; // groupIdはオプショナルかもしれないので ? を追加 + const { groupId } = context.args as { groupId?: number }; // ストーリー開始時にモックデータをクリア if (typeof groupId === 'number') { @@ -103,13 +100,6 @@ export const NewApplication: Story = { }, }, }, - play: async ({ canvasElement }) => { - const canvas = within(canvasElement); - - // フォームが表示されていることを確認 - expect(canvas.getByText('購入品の追加')).toBeInTheDocument(); - expect(canvas.getByText('登録')).toBeInTheDocument(); - }, }; // 既存データありの状態(サマリー表示) @@ -129,7 +119,7 @@ export const WithExistingData: Story = { }, decorators: [ (Story, context) => { - const { groupId } = context.args as { groupId: number }; // このストーリーではgroupIdが必須と想定 + const { groupId } = context.args as { groupId: number }; const mockData: MockPurchaseListResponse[] = [ { @@ -154,7 +144,6 @@ export const WithExistingData: Story = { }, ]; - // groupIdが数値であることを確認してからモックデータを設定 if (typeof groupId === 'number') { mockDataSetter(groupId, mockData); } @@ -181,7 +170,7 @@ export const ComplexData: Story = { }, decorators: [ (Story, context) => { - const { groupId } = context.args as { groupId: number }; // このストーリーではgroupIdが必須と想定 + const { groupId } = context.args as { groupId: number }; const mockData: MockPurchaseListResponse[] = [ { @@ -242,7 +231,7 @@ export const AfterDeadline: Story = { }, decorators: [ (Story, context) => { - const { groupId } = context.args as { groupId: number }; // このストーリーではgroupIdが必須と想定 + const { groupId } = context.args as { groupId: number }; const mockData: MockPurchaseListResponse[] = [ { @@ -264,12 +253,6 @@ export const AfterDeadline: Story = { return ; }, ], - play: async ({ canvasElement }) => { - const canvas = within(canvasElement); - - // 編集ボタンが表示されていないことを確認 - expect(canvas.queryByText('修正')).not.toBeInTheDocument(); - }, }; // 締切期限後で未登録の状態 @@ -286,19 +269,4 @@ export const DeadlineUnregistered: Story = { }, }, }, - play: async ({ canvasElement }) => { - const canvas = within(canvasElement); - - // 締切期限メッセージが表示されていることを確認 - expect(canvas.getByText('申請期限が過ぎています')).toBeInTheDocument(); - expect( - canvas.getByText( - '購入品申請の締切期限が過ぎているため、新規申請はできません。' - ) - ).toBeInTheDocument(); - - // フォームの要素が表示されていないことを確認 - expect(canvas.queryByText('購入品の追加')).not.toBeInTheDocument(); - expect(canvas.queryByText('登録')).not.toBeInTheDocument(); - }, }; From 1b58c9607c5a9126e951aefc5cab2695a6e3a01e Mon Sep 17 00:00:00 2001 From: hikahana <22.h.hanada.nutfes@gmail.com> Date: Mon, 2 Jun 2025 09:53:54 +0900 Subject: [PATCH 062/285] =?UTF-8?q?feat:=20scroll=20hide=E3=82=92=E5=B0=8E?= =?UTF-8?q?=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- user/package.json | 1 + user/pnpm-lock.yaml | 12 ++++++++++++ user/tailwind.config.ts | 3 ++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/user/package.json b/user/package.json index c8ab90737..56f339b13 100644 --- a/user/package.json +++ b/user/package.json @@ -41,6 +41,7 @@ "snakecase-keys": "^8.0.1", "storybook": "^8.5.0", "swr": "^2.3.3", + "tailwind-scrollbar-hide": "^4.0.0", "zod": "^3.24.2", "zustand": "^5.0.3" }, diff --git a/user/pnpm-lock.yaml b/user/pnpm-lock.yaml index e552ed8a3..2b8480200 100644 --- a/user/pnpm-lock.yaml +++ b/user/pnpm-lock.yaml @@ -80,6 +80,9 @@ importers: swr: specifier: ^2.3.3 version: 2.3.3(react@19.0.0-rc-66855b96-20241106) + tailwind-scrollbar-hide: + specifier: ^4.0.0 + version: 4.0.0(tailwindcss@3.4.17) zod: specifier: ^3.24.2 version: 3.24.2 @@ -4946,6 +4949,11 @@ packages: resolution: {integrity: sha512-R1urvuyiTaWfeCggqEvpDJwAlDVdsT9NM+IP//Tk2x7qHCkSvBk/fwFgw/TLAHzZlrAnnazMcRw0ZD8HlYFTEQ==} engines: {node: ^14.18.0 || >=16.0.0} + tailwind-scrollbar-hide@4.0.0: + resolution: {integrity: sha512-gobtvVcThB2Dxhy0EeYSS1RKQJ5baDFkamkhwBvzvevwX6L4XQfpZ3me9s25Ss1ecFVT5jPYJ50n+7xTBJG9WQ==} + peerDependencies: + tailwindcss: '>=3.0.0 || >= 4.0.0 || >= 4.0.0-beta.8 || >= 4.0.0-alpha.20' + tailwindcss@3.4.17: resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} engines: {node: '>=14.0.0'} @@ -10893,6 +10901,10 @@ snapshots: '@pkgr/core': 0.2.0 tslib: 2.8.1 + tailwind-scrollbar-hide@4.0.0(tailwindcss@3.4.17): + dependencies: + tailwindcss: 3.4.17 + tailwindcss@3.4.17: dependencies: '@alloc/quick-lru': 5.2.0 diff --git a/user/tailwind.config.ts b/user/tailwind.config.ts index 7094857f2..8aaed5213 100644 --- a/user/tailwind.config.ts +++ b/user/tailwind.config.ts @@ -1,4 +1,5 @@ import forms from '@tailwindcss/forms'; +import scrollbarHide from 'tailwind-scrollbar-hide'; import type { Config } from 'tailwindcss'; export default { @@ -24,5 +25,5 @@ export default { }, }, }, - plugins: [forms], + plugins: [forms, scrollbarHide], } satisfies Config; From fba8999b1c25a661a182afa94f5d36b21ae2ddb9 Mon Sep 17 00:00:00 2001 From: hikahana <22.h.hanada.nutfes@gmail.com> Date: Mon, 2 Jun 2025 09:55:37 +0900 Subject: [PATCH 063/285] =?UTF-8?q?fix:=20Checkbox=E3=82=B3=E3=83=B3?= =?UTF-8?q?=E3=83=9D=E3=83=BC=E3=83=8D=E3=83=B3=E3=83=88=E3=81=AE=E3=83=86?= =?UTF-8?q?=E3=82=AD=E3=82=B9=E3=83=88=E3=81=AB=E3=82=AF=E3=83=A9=E3=82=B9?= =?UTF-8?q?=E5=90=8D=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- user/src/components/Form/CheckBox/Checkbox.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/src/components/Form/CheckBox/Checkbox.tsx b/user/src/components/Form/CheckBox/Checkbox.tsx index 481767a29..f2ac1178d 100644 --- a/user/src/components/Form/CheckBox/Checkbox.tsx +++ b/user/src/components/Form/CheckBox/Checkbox.tsx @@ -37,7 +37,7 @@ const Checkbox: FC = ({ <>