From 3bc7a0c58b9c882af9b1707a7623501413865c6d Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 11 Aug 2024 16:29:10 +0200 Subject: [PATCH] Create model and controller --- app/controllers/groups_controller.rb | 5 +++++ app/helpers/groups_helper.rb | 2 ++ app/models/group.rb | 4 ++++ app/serializers/serializable_group.rb | 5 +++++ config/routes.rb | 1 + db/migrate/20240811142121_create_groups.rb | 13 +++++++++++++ db/schema.rb | 11 ++++++++++- db/seeds.rb | 2 ++ spec/factories/groups.rb | 7 +++++++ spec/models/group_spec.rb | 5 +++++ 10 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 app/controllers/groups_controller.rb create mode 100644 app/helpers/groups_helper.rb create mode 100644 app/models/group.rb create mode 100644 app/serializers/serializable_group.rb create mode 100644 db/migrate/20240811142121_create_groups.rb create mode 100644 spec/factories/groups.rb create mode 100644 spec/models/group_spec.rb diff --git a/app/controllers/groups_controller.rb b/app/controllers/groups_controller.rb new file mode 100644 index 0000000..3a0b9c9 --- /dev/null +++ b/app/controllers/groups_controller.rb @@ -0,0 +1,5 @@ +class GroupsController < ApplicationController + def index + render jsonapi: Group.all + end +end diff --git a/app/helpers/groups_helper.rb b/app/helpers/groups_helper.rb new file mode 100644 index 0000000..c091b2f --- /dev/null +++ b/app/helpers/groups_helper.rb @@ -0,0 +1,2 @@ +module GroupsHelper +end diff --git a/app/models/group.rb b/app/models/group.rb new file mode 100644 index 0000000..6d753b8 --- /dev/null +++ b/app/models/group.rb @@ -0,0 +1,4 @@ +class Group < ApplicationRecord + validates :name, uniqueness: true + validates :name, :order, presence: true +end diff --git a/app/serializers/serializable_group.rb b/app/serializers/serializable_group.rb new file mode 100644 index 0000000..5c3eec5 --- /dev/null +++ b/app/serializers/serializable_group.rb @@ -0,0 +1,5 @@ +class SerializableGroup < JSONAPI::Serializable::Resource + type 'group' + + attributes :name, :icon +end diff --git a/config/routes.rb b/config/routes.rb index 67f091d..6e4d17b 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,4 +1,5 @@ Rails.application.routes.draw do + resources :groups, only: :index resources :guests do post :import, on: :collection end diff --git a/db/migrate/20240811142121_create_groups.rb b/db/migrate/20240811142121_create_groups.rb new file mode 100644 index 0000000..0246978 --- /dev/null +++ b/db/migrate/20240811142121_create_groups.rb @@ -0,0 +1,13 @@ +class CreateGroups < ActiveRecord::Migration[7.1] + def change + create_table :groups, id: :uuid do |t| + t.string :name, null: false + t.string :icon + t.integer :order, null: false, default: 1 + + t.timestamps + end + + add_index :groups, :name, unique: true + end +end diff --git a/db/schema.rb b/db/schema.rb index 08c4026..a3a2de8 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.1].define(version: 2024_07_24_181853) do +ActiveRecord::Schema[7.1].define(version: 2024_08_11_142121) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -26,6 +26,15 @@ ActiveRecord::Schema[7.1].define(version: 2024_07_24_181853) do t.datetime "updated_at", null: false end + create_table "groups", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + t.string "name", null: false + t.string "icon" + t.integer "order", default: 1, null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["name"], name: "index_groups_on_name", unique: true + end + create_table "guests", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.string "first_name" t.string "last_name" diff --git a/db/seeds.rb b/db/seeds.rb index 162a80f..67a32b9 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -5,6 +5,7 @@ Expense.delete_all Guest.delete_all ActsAsTaggableOn::Tagging.delete_all ActsAsTaggableOn::Tag.delete_all +Group.delete_all Expense.create!(name: 'Photographer', amount: 3000, pricing_type: 'fixed') Expense.create!(name: 'Country house', amount: 6000, pricing_type: 'fixed') @@ -43,6 +44,7 @@ samples = { football_team_a: 15, dance_club: 10 }.each_with_object([]) do |(affinity_group, count), acc| + Group.find_or_create_by!(name: affinity_group.to_s.humanize) count.times { acc << affinity_group } end diff --git a/spec/factories/groups.rb b/spec/factories/groups.rb new file mode 100644 index 0000000..a8fe677 --- /dev/null +++ b/spec/factories/groups.rb @@ -0,0 +1,7 @@ +FactoryBot.define do + factory :group do + name { "MyString" } + icon { "MyString" } + order { 1 } + end +end diff --git a/spec/models/group_spec.rb b/spec/models/group_spec.rb new file mode 100644 index 0000000..be100cf --- /dev/null +++ b/spec/models/group_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Group, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end