Rails API + Evendy app


Just few words about backend part of Evendy.ru project.

Nothing special here, I prefered to use some gems my previous post:

In my Gemfile:

...
gem 'active_model_serializers'
gem 'dry-validation'
gem 'dry-transaction'
...

I prefer to use devise with devise-jwt gem for jwt tokens auth.

You can find code samples in my repository.

Heme small part of our app - Events::ApplyCommand class, so we just call command from our EventsController like this:

  def apply
    run_command(Events::ApplyCommand, id: params[:id], user: current_user)
  end

We use here AllocationService for checking empty slots for selected event add them to roster, and TelegramService to notify our users in special Telegram channel.

class Events::ApplyCommand < BaseCommand
  
  step :check_limit
  step :authorize
  step :create_visit

  def check_limit(id:, user:)
    event = Event.find(id)
    if AllocationService.new(event, user).empty_slots?
      Right(event: event, user: user)
    else
      Left(error(I18n.t('errors.events.reached_limit')))
    end
  end

  def authorize(event:, user:)
    if user.is_banned?
      Left(error(I18n.t('errors.events.user_banned')))
    else
      Right(event: event, user: user)
    end
  end

  def create_visit(event:, user:)
    visit = Visit.where(event: event, user: user).first_or_initialize
    tg = TelegramService.new(event, user)
    if visit.persisted?
      tg.call(:no)
      visit.destroy
    else
      tg.call(:go)
      visit.save
    end
    Right(visit)
  end
end

I think, at the end of this week I’ll add new posts about other parts of our system.