mirror of
https://github.com/Freika/dawarich.git
synced 2026-01-10 17:21:38 -05:00
90 lines
2 KiB
Ruby
90 lines
2 KiB
Ruby
|
|
# frozen_string_literal: true
|
||
|
|
|
||
|
|
class FamiliesController < ApplicationController
|
||
|
|
before_action :authenticate_user!
|
||
|
|
before_action :set_family, only: %i[show edit update destroy leave]
|
||
|
|
|
||
|
|
def index
|
||
|
|
redirect_to family_path(current_user.family) if current_user.in_family?
|
||
|
|
end
|
||
|
|
|
||
|
|
def show
|
||
|
|
authorize @family
|
||
|
|
|
||
|
|
@members = @family.members.includes(:family_membership)
|
||
|
|
@pending_invitations = @family.family_invitations.active
|
||
|
|
end
|
||
|
|
|
||
|
|
def new
|
||
|
|
redirect_to family_path(current_user.family) if current_user.in_family?
|
||
|
|
|
||
|
|
@family = Family.new
|
||
|
|
end
|
||
|
|
|
||
|
|
def create
|
||
|
|
service = Families::Create.new(
|
||
|
|
user: current_user,
|
||
|
|
name: family_params[:name]
|
||
|
|
)
|
||
|
|
|
||
|
|
if service.call
|
||
|
|
redirect_to family_path(service.family), notice: 'Family created successfully!'
|
||
|
|
else
|
||
|
|
@family = Family.new(family_params)
|
||
|
|
|
||
|
|
service.errors.each do |attribute, message|
|
||
|
|
@family.errors.add(attribute, message)
|
||
|
|
end
|
||
|
|
render :new, status: :unprocessable_entity
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
def edit
|
||
|
|
authorize @family
|
||
|
|
end
|
||
|
|
|
||
|
|
def update
|
||
|
|
authorize @family
|
||
|
|
|
||
|
|
if @family.update(family_params)
|
||
|
|
redirect_to family_path(@family), notice: 'Family updated successfully!'
|
||
|
|
else
|
||
|
|
render :edit, status: :unprocessable_entity
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
def destroy
|
||
|
|
authorize @family
|
||
|
|
|
||
|
|
if @family.members.count > 1
|
||
|
|
redirect_to family_path(@family), alert: 'Cannot delete family with members. Remove all members first.'
|
||
|
|
else
|
||
|
|
@family.destroy
|
||
|
|
redirect_to families_path, notice: 'Family deleted successfully!'
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
def leave
|
||
|
|
authorize @family, :leave?
|
||
|
|
|
||
|
|
service = Families::Leave.new(user: current_user)
|
||
|
|
|
||
|
|
if service.call
|
||
|
|
redirect_to families_path, notice: 'You have left the family'
|
||
|
|
else
|
||
|
|
redirect_to family_path(@family), alert: service.error_message || 'Cannot leave family.'
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
private
|
||
|
|
|
||
|
|
def set_family
|
||
|
|
@family = current_user.family
|
||
|
|
redirect_to families_path unless @family
|
||
|
|
end
|
||
|
|
|
||
|
|
def family_params
|
||
|
|
params.require(:family).permit(:name)
|
||
|
|
end
|
||
|
|
end
|