Skip to content
代码片段 群组 项目
未验证 提交 75dd4e18 编辑于 作者: Tiger Watson's avatar Tiger Watson 提交者: GitLab
浏览文件

Merge branch 'ph/groupSavedRepliesTable' into 'master'

Added group saved replies table

See merge request https://gitlab.com/gitlab-org/gitlab/-/merge_requests/143515



Merged-by: default avatarTiger Watson <twatson@gitlab.com>
Approved-by: default avatarTiger Watson <twatson@gitlab.com>
Reviewed-by: default avatarTiger Watson <twatson@gitlab.com>
Reviewed-by: default avatarBala Kumar <sbalakumar@gitlab.com>
Co-authored-by: default avatarPhil Hughes <me@iamphill.com>
No related branches found
No related tags found
无相关合并请求
# frozen_string_literal: true
module SavedReplyConcern
extend ActiveSupport::Concern
included do
validates namespace_foreign_key, :name, :content, presence: true
validates :content, length: { maximum: 10000 }
validates :name,
length: { maximum: 255 },
uniqueness: { scope: [namespace_foreign_key] }
def self.find_saved_reply(**args)
find_by(args)
end
end
end
...@@ -2,18 +2,13 @@ ...@@ -2,18 +2,13 @@
module Users module Users
class SavedReply < ApplicationRecord class SavedReply < ApplicationRecord
def self.namespace_foreign_key
:user_id
end
self.table_name = 'saved_replies' self.table_name = 'saved_replies'
belongs_to :user include SavedReplyConcern
validates :user_id, :name, :content, presence: true
validates :name,
length: { maximum: 255 },
uniqueness: { scope: [:user_id] }
validates :content, length: { maximum: 10000 }
def self.find_saved_reply(user_id:, id:) belongs_to :user
::Users::SavedReply.find_by(user_id: user_id, id: id)
end
end end
end end
---
table_name: group_saved_replies
classes:
- Groups::SavedReply
feature_categories:
- code_review_workflow
description: Comment templates used to populate comments
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/143515
milestone: '16.9'
gitlab_schema: gitlab_main_cell
sharding_key:
group_id: namespaces
# frozen_string_literal: true
class CreateGroupSavedRepliesTable < Gitlab::Database::Migration[2.2]
enable_lock_retries!
milestone '16.9'
def change
create_table :group_saved_replies do |t|
t.references :group, references: :namespaces, null: false,
foreign_key: { to_table: :namespaces, on_delete: :cascade }, index: true
t.timestamps_with_timezone null: false
t.text :name, null: false, limit: 255
t.text :content, null: false, limit: 10000
end
end
end
8e21124a691843445077a9d6bc5541eea99f8b2f3f90e1846429ed3e2f97d72d
\ No newline at end of file
...@@ -17888,6 +17888,26 @@ CREATE SEQUENCE group_repository_storage_moves_id_seq ...@@ -17888,6 +17888,26 @@ CREATE SEQUENCE group_repository_storage_moves_id_seq
   
ALTER SEQUENCE group_repository_storage_moves_id_seq OWNED BY group_repository_storage_moves.id; ALTER SEQUENCE group_repository_storage_moves_id_seq OWNED BY group_repository_storage_moves.id;
   
CREATE TABLE group_saved_replies (
id bigint NOT NULL,
group_id bigint NOT NULL,
created_at timestamp with time zone NOT NULL,
updated_at timestamp with time zone NOT NULL,
name text NOT NULL,
content text NOT NULL,
CONSTRAINT check_13510378d3 CHECK ((char_length(name) <= 255)),
CONSTRAINT check_4a96378d43 CHECK ((char_length(content) <= 10000))
);
CREATE SEQUENCE group_saved_replies_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER SEQUENCE group_saved_replies_id_seq OWNED BY group_saved_replies.id;
CREATE TABLE group_ssh_certificates ( CREATE TABLE group_ssh_certificates (
id bigint NOT NULL, id bigint NOT NULL,
namespace_id bigint NOT NULL, namespace_id bigint NOT NULL,
...@@ -27417,6 +27437,8 @@ ALTER TABLE ONLY group_import_states ALTER COLUMN group_id SET DEFAULT nextval(' ...@@ -27417,6 +27437,8 @@ ALTER TABLE ONLY group_import_states ALTER COLUMN group_id SET DEFAULT nextval('
   
ALTER TABLE ONLY group_repository_storage_moves ALTER COLUMN id SET DEFAULT nextval('group_repository_storage_moves_id_seq'::regclass); ALTER TABLE ONLY group_repository_storage_moves ALTER COLUMN id SET DEFAULT nextval('group_repository_storage_moves_id_seq'::regclass);
   
ALTER TABLE ONLY group_saved_replies ALTER COLUMN id SET DEFAULT nextval('group_saved_replies_id_seq'::regclass);
ALTER TABLE ONLY group_ssh_certificates ALTER COLUMN id SET DEFAULT nextval('group_ssh_certificates_id_seq'::regclass); ALTER TABLE ONLY group_ssh_certificates ALTER COLUMN id SET DEFAULT nextval('group_ssh_certificates_id_seq'::regclass);
   
ALTER TABLE ONLY group_wiki_repository_states ALTER COLUMN id SET DEFAULT nextval('group_wiki_repository_states_id_seq'::regclass); ALTER TABLE ONLY group_wiki_repository_states ALTER COLUMN id SET DEFAULT nextval('group_wiki_repository_states_id_seq'::regclass);
...@@ -29729,6 +29751,9 @@ ALTER TABLE ONLY group_merge_request_approval_settings ...@@ -29729,6 +29751,9 @@ ALTER TABLE ONLY group_merge_request_approval_settings
ALTER TABLE ONLY group_repository_storage_moves ALTER TABLE ONLY group_repository_storage_moves
ADD CONSTRAINT group_repository_storage_moves_pkey PRIMARY KEY (id); ADD CONSTRAINT group_repository_storage_moves_pkey PRIMARY KEY (id);
   
ALTER TABLE ONLY group_saved_replies
ADD CONSTRAINT group_saved_replies_pkey PRIMARY KEY (id);
ALTER TABLE ONLY group_ssh_certificates ALTER TABLE ONLY group_ssh_certificates
ADD CONSTRAINT group_ssh_certificates_pkey PRIMARY KEY (id); ADD CONSTRAINT group_ssh_certificates_pkey PRIMARY KEY (id);
   
...@@ -33970,6 +33995,8 @@ CREATE INDEX index_group_import_states_on_user_id ON group_import_states USING b ...@@ -33970,6 +33995,8 @@ CREATE INDEX index_group_import_states_on_user_id ON group_import_states USING b
   
CREATE INDEX index_group_repository_storage_moves_on_group_id ON group_repository_storage_moves USING btree (group_id); CREATE INDEX index_group_repository_storage_moves_on_group_id ON group_repository_storage_moves USING btree (group_id);
   
CREATE INDEX index_group_saved_replies_on_group_id ON group_saved_replies USING btree (group_id);
CREATE UNIQUE INDEX index_group_ssh_certificates_on_fingerprint ON group_ssh_certificates USING btree (fingerprint); CREATE UNIQUE INDEX index_group_ssh_certificates_on_fingerprint ON group_ssh_certificates USING btree (fingerprint);
   
CREATE INDEX index_group_ssh_certificates_on_namespace_id ON group_ssh_certificates USING btree (namespace_id); CREATE INDEX index_group_ssh_certificates_on_namespace_id ON group_ssh_certificates USING btree (namespace_id);
...@@ -40693,6 +40720,9 @@ ALTER TABLE ONLY container_registry_protection_rules ...@@ -40693,6 +40720,9 @@ ALTER TABLE ONLY container_registry_protection_rules
ALTER TABLE ONLY clusters ALTER TABLE ONLY clusters
ADD CONSTRAINT fk_rails_ac3a663d79 FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL; ADD CONSTRAINT fk_rails_ac3a663d79 FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL;
   
ALTER TABLE ONLY group_saved_replies
ADD CONSTRAINT fk_rails_acd8e1889b FOREIGN KEY (group_id) REFERENCES namespaces(id) ON DELETE CASCADE;
ALTER TABLE ONLY packages_composer_metadata ALTER TABLE ONLY packages_composer_metadata
ADD CONSTRAINT fk_rails_ad48c2e5bb FOREIGN KEY (package_id) REFERENCES packages_packages(id) ON DELETE CASCADE; ADD CONSTRAINT fk_rails_ad48c2e5bb FOREIGN KEY (package_id) REFERENCES packages_packages(id) ON DELETE CASCADE;
   
...@@ -84,6 +84,8 @@ module Group ...@@ -84,6 +84,8 @@ module Group
belongs_to :push_rule, inverse_of: :group belongs_to :push_rule, inverse_of: :group
has_many :approval_rules, class_name: 'ApprovalRules::ApprovalGroupRule', inverse_of: :group has_many :approval_rules, class_name: 'ApprovalRules::ApprovalGroupRule', inverse_of: :group
has_many :saved_replies, class_name: 'Groups::SavedReply'
delegate :deleting_user, :marked_for_deletion_on, to: :deletion_schedule, allow_nil: true delegate :deleting_user, :marked_for_deletion_on, to: :deletion_schedule, allow_nil: true
delegate :repository_read_only, delegate :repository_read_only,
......
# frozen_string_literal: true
module Groups
class SavedReply < ApplicationRecord
def self.namespace_foreign_key
:group_id
end
self.table_name = :group_saved_replies
include SavedReplyConcern
belongs_to :group
end
end
# frozen_string_literal: true
FactoryBot.define do
factory :group_saved_reply, class: 'Groups::SavedReply' do
sequence(:name) { |n| "saved_reply_#{n}" }
content { 'Saved Reply Content' }
group
end
end
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Groups::SavedReply, feature_category: :code_review_workflow do
let_it_be(:saved_reply) { create(:group_saved_reply) }
describe 'validations' do
it { is_expected.to validate_presence_of(:group_id) }
it { is_expected.to validate_presence_of(:name) }
it { is_expected.to validate_presence_of(:content) }
it { is_expected.to validate_uniqueness_of(:name).scoped_to([:group_id]) }
it { is_expected.to validate_length_of(:name).is_at_most(255) }
it { is_expected.to validate_length_of(:content).is_at_most(10000) }
end
end
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册