mirror of
https://github.com/Freika/dawarich.git
synced 2026-01-10 01:01:39 -05:00
66 lines
1.4 KiB
Ruby
66 lines
1.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Families
|
|
class Create
|
|
attr_reader :user, :name, :family, :errors
|
|
|
|
def initialize(user:, name:)
|
|
@user = user
|
|
@name = name
|
|
@errors = {}
|
|
end
|
|
|
|
def call
|
|
if user.in_family?
|
|
@errors[:user] = 'User is already in a family'
|
|
return false
|
|
end
|
|
|
|
if user.created_family.present?
|
|
@errors[:user] = 'User has already created a family'
|
|
return false
|
|
end
|
|
|
|
unless can_create_family?
|
|
@errors[:base] = 'Cannot create family'
|
|
return false
|
|
end
|
|
|
|
ActiveRecord::Base.transaction do
|
|
create_family
|
|
create_owner_membership
|
|
end
|
|
|
|
true
|
|
rescue ActiveRecord::RecordInvalid => e
|
|
if @family&.errors&.any?
|
|
@family.errors.each { |attribute, message| @errors[attribute] = message }
|
|
else
|
|
@errors[:base] = e.message
|
|
end
|
|
false
|
|
end
|
|
|
|
private
|
|
|
|
def can_create_family?
|
|
return true if DawarichSettings.self_hosted?
|
|
|
|
# TODO: Add cloud plan validation here when needed
|
|
# For now, allow all users to create families
|
|
true
|
|
end
|
|
|
|
def create_family
|
|
@family = Family.create!(name:, creator: user)
|
|
end
|
|
|
|
def create_owner_membership
|
|
FamilyMembership.create!(
|
|
family: family,
|
|
user: user,
|
|
role: :owner
|
|
)
|
|
end
|
|
end
|
|
end
|