Skip to content
Snippets Groups Projects

C3Lingo rescheduled

Rapid assignment of shifts for chaos events

Overview

Technologies:

Dev environment

The project comes with a devcontainer for VSCode and compatible editors. Simply open the project folder in Code (or using devcontainer open <path>) and after a few seconds, a suitable container should be ready.

Run bin/dev in the integrated terminal to start the dev webserver and the tailwind watch job (see Procfile.dev for details). Access your local rescheduled at http://127.0.0.1:3000.

Secrets

The application requires some secrets, as of writing these include:

  • filedrop_user
  • filedrop_password
  • heartbeat_deen
  • heartbeat_more
  • telegram_bot_token

You can supply the secrets by running rails credentials:edit or pass them as environment variable in upper case (e.g. FILEDROP_USER).

Preparation for an event

tbd.

  • talks about seeds
  • set "relevant stages"
    relevant = ["Saal 1", "Saal ZIGZAG", "Saal GLITCH", "Stage HUFF", "Stage YELL", "Canceled talk"]
    conf=Conference.find_by(slug: "38c3")
    conf.relevant_stages=conf.stages.select { |val| relevant.include?(val[:name]) }
  • sort stages
    Stage.where(name: "Saal 1").update(weight: 10)
    Stage.where(name: "Saal GLITCH").update(weight: 20)
    Stage.where(name: "Saal ZIGZAG").update(weight: 30)
    Stage.where(name: "Stage HUFF").update(weight: 40)
    Stage.where(name: "Stage YELL").update(weight: 50)

In production

See rescheduled-deploy for a full docker-compose stack and more explanations.

Tips and Tricks

Helpful rails tasks

By running bin/rails <command> you can trigger some helpful actions, such as

  • rails c[onsole]: Start interactive ruby shell
  • rails db: Start sqlite shell with the currently used DB
  • rails db:migrate: Run pending DB migrations, automatically done by docker image on start
  • rails db:seed (Re-)import DB seeds from db/seeds.rb
  • rails generate Powerful tool to generate boilerplate, see

In rails console

  • Manually trigger sync job

    FetchConferenceDataJob.perform_now("38c3")
  • Reset user password

    pw = SecureRandom.alphanumeric(12)
    u = User.find_by(name:"username_here")
    u.update(password: pw, password_confirmation: pw)
    u.save!
  • Send a test message to Telegram

    TelegramGroupChatNotificationJob.perform_now(text: "der habicht sieht die gegenwart")
  • List all notes angels put in their candidacies:

    Candidate.includes(:user, :session).where.not(note: [nil, ""]).pluck('sessions.title','users.name', :note)