From d544b4da7671096df572ef7d42c6092a72aaf2bd Mon Sep 17 00:00:00 2001 From: Zsolt Tasnadi Date: Tue, 5 May 2026 22:15:07 +0200 Subject: [PATCH] member model --- apps/api/app/admin/members.rb | 40 +++++++++++++++++++ .../app/controllers/api/members_controller.rb | 8 ++++ apps/api/app/models/member.rb | 5 +++ apps/api/config/routes.rb | 1 + .../migrate/20260505000006_create_members.rb | 12 ++++++ apps/api/db/schema.rb | 11 ++++- apps/api/db/seeds.rb | 13 ++++++ apps/frontend/src/views/TeamView.vue | 36 ++++++++++------- 8 files changed, 111 insertions(+), 15 deletions(-) create mode 100644 apps/api/app/admin/members.rb create mode 100644 apps/api/app/controllers/api/members_controller.rb create mode 100644 apps/api/app/models/member.rb create mode 100644 apps/api/db/migrate/20260505000006_create_members.rb diff --git a/apps/api/app/admin/members.rb b/apps/api/app/admin/members.rb new file mode 100644 index 0000000..41e3b48 --- /dev/null +++ b/apps/api/app/admin/members.rb @@ -0,0 +1,40 @@ +ActiveAdmin.register Member do + permit_params :nick, :real_nick, :motto, :avatar_filename + + menu priority: 4 + + index do + selectable_column + id_column + column :nick + column :real_nick + column :avatar_filename + column :created_at + actions + end + + filter :nick + filter :real_nick + + show do + attributes_table do + row :id + row :nick + row :real_nick + row :motto + row :avatar_filename + row :created_at + row :updated_at + end + end + + form do |f| + f.inputs do + f.input :nick + f.input :real_nick + f.input :motto + f.input :avatar_filename + end + f.actions + end +end diff --git a/apps/api/app/controllers/api/members_controller.rb b/apps/api/app/controllers/api/members_controller.rb new file mode 100644 index 0000000..297eca5 --- /dev/null +++ b/apps/api/app/controllers/api/members_controller.rb @@ -0,0 +1,8 @@ +class Api::MembersController < ApiController + def index + members = Member.order(:id).map do |m| + { nick: m.nick, real_nick: m.real_nick, motto: m.motto, avatar_filename: m.avatar_filename } + end + render json: members + end +end diff --git a/apps/api/app/models/member.rb b/apps/api/app/models/member.rb new file mode 100644 index 0000000..c8b4770 --- /dev/null +++ b/apps/api/app/models/member.rb @@ -0,0 +1,5 @@ +class Member < ApplicationRecord + def self.ransackable_attributes(auth_object = nil) + %w[avatar_filename created_at id motto nick real_nick updated_at] + end +end diff --git a/apps/api/config/routes.rb b/apps/api/config/routes.rb index 51dada1..9b2ab2d 100644 --- a/apps/api/config/routes.rb +++ b/apps/api/config/routes.rb @@ -6,6 +6,7 @@ Rails.application.routes.draw do get "software", to: "software#index" get "software/highlighted", to: "software_highlighted#index" get "events", to: "events#index" + get "members", to: "members#index" end get "update", to: "update#update" diff --git a/apps/api/db/migrate/20260505000006_create_members.rb b/apps/api/db/migrate/20260505000006_create_members.rb new file mode 100644 index 0000000..d5c4768 --- /dev/null +++ b/apps/api/db/migrate/20260505000006_create_members.rb @@ -0,0 +1,12 @@ +class CreateMembers < ActiveRecord::Migration[7.1] + def change + create_table :members do |t| + t.string :nick, null: false + t.string :real_nick, null: false + t.text :motto + t.string :avatar_filename + + t.timestamps + end + end +end diff --git a/apps/api/db/schema.rb b/apps/api/db/schema.rb index b53a48b..bb1b320 100644 --- a/apps/api/db/schema.rb +++ b/apps/api/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[8.1].define(version: 2026_05_05_000005) do +ActiveRecord::Schema[8.1].define(version: 2026_05_05_000006) do create_table "admin_users", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| t.datetime "created_at", null: false t.string "email", default: "", null: false @@ -145,6 +145,15 @@ ActiveRecord::Schema[8.1].define(version: 2026_05_05_000005) do t.index ["username"], name: "users_username_unique", unique: true end + create_table "members", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| + t.string "avatar_filename" + t.datetime "created_at", null: false + t.text "motto" + t.string "nick", null: false + t.string "real_nick", null: false + t.datetime "updated_at", null: false + end + create_table "releases", id: { type: :bigint, unsigned: true }, charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| t.string "cartridge_path" t.datetime "created_at", precision: 3 diff --git a/apps/api/db/seeds.rb b/apps/api/db/seeds.rb index 780ddb4..1b58a37 100644 --- a/apps/api/db/seeds.rb +++ b/apps/api/db/seeds.rb @@ -2,3 +2,16 @@ AdminUser.find_or_create_by!(email: ENV.fetch("ADMIN_EMAIL", "admin@teletype.hu" user.password = ENV.fetch("ADMIN_PASSWORD", "password123") user.password_confirmation = ENV.fetch("ADMIN_PASSWORD", "password123") end + +[ + { nick: "Mr. Zero", real_nick: "Tasi", motto: "His dream is to become an open-source knight.", avatar_filename: "mr.zero.png" }, + { nick: "Mr. One", real_nick: "Ballz", motto: "The cheese is half-eaten. Something here went very wrong.", avatar_filename: "mr.one.png" }, + { nick: "Mr. Two", real_nick: "Z", motto: "The egg was first or the chicken? It doesn't matter, we eat both.", avatar_filename: "mr.two.png" }, + { nick: "Mr. Three", real_nick: "gBird", motto: "Life is beautiful because it contains the possibility of becoming human.", avatar_filename: "mr.three.png" }, +].each do |attrs| + Member.find_or_create_by!(nick: attrs[:nick]) do |m| + m.real_nick = attrs[:real_nick] + m.motto = attrs[:motto] + m.avatar_filename = attrs[:avatar_filename] + end +end diff --git a/apps/frontend/src/views/TeamView.vue b/apps/frontend/src/views/TeamView.vue index e5f50b9..4589988 100644 --- a/apps/frontend/src/views/TeamView.vue +++ b/apps/frontend/src/views/TeamView.vue @@ -10,13 +10,13 @@
-
+
- +
-

{{ member.name }}

-

{{ member.description }}

+

{{ member.nick }}: {{ member.real_nick }}

+

{{ member.motto }}

@@ -24,17 +24,25 @@