Giter Site home page Giter Site logo

jitterted / ensembler Goto Github PK

View Code? Open in Web Editor NEW
80.0 11.0 19.0 1.91 MB

Ensembler: the Remote Ensemble Registration System

License: Apache License 2.0

Java 79.62% HTML 14.35% CSS 5.90% JavaScript 0.07% Dockerfile 0.06%
hexagonal-architecture java live-coding spring spring-boot tdd

ensembler's Introduction

Ensembler - The Remote Ensemble Programming Registration System

I wrote this tool to help me manage public (and private) remote ensemble (aka mob) programming sessions, where participants are not part of an existing team, but are individuals joining to learn a skill, or to help develop a product. Since folks can come and go, managing who is participating in which mob programming session (known as an "ensemble") can get tedious. Managing their access to the GitHub repository, knowing if they're new to mobbing, and making sure no more than 5 people are part of each ensemble, etc., pushed me over the edge into creating this tool.

This is currently a Work In Progress, being built almost 100% in public, live on Twitch.

Questions?

Join me on my Discord in the dedicated #ensembler channel: https://discord.gg/FYSkuufDSH.

Environment Variables

To run this project, you will need to add the following environment variables or update the application.properties file directly.

(to update...)

github.oauth2.clientId

github.oauth2.clientSecret

Installation & Deployment

Requires Java 18 (or later) and uses Maven for building.

Since it uses GitHub OAuth2 for authentication, you'll need to register this application with your GitHub account if you want to run it yourself.

Development Setup

Docker

Docker is needed for running the TestContainer-based database tests. If you don't have docker running, those tests will be skipped.

See PostgresTestcontainerBase for information on the reusable Testcontainer setup.

Tailwind CSS

We're using Tailwind CSS 3.x with the platform-specific command-line tool (CLI). You'll need to install that separately from https://tailwindcss.com/blog/standalone-cli#get-started. You can keep it running in the background when working on HTML files (templates):

tailwindcss -i ./src/main/resources/static/ensembler.css -o ./src/main/resources/static/tailwind.css --watch

ensembler's People

Contributors

dependabot[bot] avatar lexler avatar tedyoung avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ensembler's Issues

Constrain Existing Editing of Ensembles

Name: may not allow edits after Completed

Start Date/Time changes not allowed:

  • New Date/Time in the past
  • For events that are in the past -- must use Reschedule
  • For Completed

Send group emails using BCC not TO

For notifications such as the "new ensemble", put recipients in the BCC list, not the TO list, so we don't unintentionally expose emails to others.

Send full Ensemble to Notifier

Instead of pieces:

int ensembleScheduled(String description, URI registrationLink);

send the whole Huddle so we can get other info, such as date/time, to add to notifications. Use the Member's Time Zone to convert.

Test Failure: Precision of LocalDateTime comparison with PostgreSQL

Can't reproduce locally.

Error: Failures:
Error: PostgresqlEntityTest.huddleEntityStoredViaJdbcIsRetrievedWithMembers:63
Expecting:
com.jitterted.mobreg.adapter.out.jdbc.HuddleEntity@feb57b4
to be equal to:
com.jitterted.mobreg.adapter.out.jdbc.HuddleEntity@7893b8c
when recursively comparing field by field, but found the following difference:

field/property 'dateTimeUtc' differ:

  • actual value : 2021-10-27T23:22:14.995996 (java.time.LocalDateTime)
  • expected value : 2021-10-27T23:22:14.995996225 (java.time.LocalDateTime)

Add Time Zone ๐Ÿ˜ญ to the Member's Profile

Initially for sending emails, need to localize the date/time included in "registration confirmation" and "new huddle created" emails.

Editable on the profile edit page.

Get initial value from the browser when registering.

Accepted Member Notification of Ensemble Completed (Recording Available)

After the recent fix for #11, all emails now get sent with recipients emails in BCC. For direct email notifications, such as registration confirmation, there's only one recipient.

These are group notifications: New Ensemble Scheduled, and Ensemble Recording Available.

This is an individual notification: Registration Confirmation

Constrain Editing of existing Ensembles

For future ensembles: only allow editing of Name, Zoom link, and date/time.

For past (but not completed) ensembles: only allow editing of Name

For completed ensembles: edit only video recording link

Reschedule Ensemble

Sends notification

This is really a Cancel + Create shortcut as those who registered for the original date/time should not already be registered.

Later: prioritize those who already registered to be able to register for the rescheduled one.

Zoom API: Use Passcode and not Waiting Room

When using the API to create a Zoom meeting, apparently I'm using "waiting room" as the security measure and I should be using the "passcode" option. Set the default_password setting to true.

Some unit tests fail for non-english locale

The following unit tests fail on my local machine (which is located in Austria):

  • membersInDifferentTimeZonesGetCustomizedEnsembleScheduledEmail
  • memberWithEmailWhenEnsembleScheduledThenCustomEmailSentToMember
  • memberWithEmailAcceptsThenEmailSentToMemberWithEnsembleDetails

Here's an example of one of the assertion errors:

java.lang.AssertionError: 
Expecting actual:
  ["Ensembler: New Ensemble Scheduled for 2021-12-17 at 1:00pm (GMT-08:00)",
    "Ensembler: New Ensemble Scheduled for 2021-12-17 at 4:00pm (GMT-05:00)"]
to contain exactly (and in same order):
  ["Ensembler: New Ensemble Scheduled for 2021-12-17 at 1:00PM (PST)",
    "Ensembler: New Ensemble Scheduled for 2021-12-17 at 4:00PM (EST)"]
but some elements were not found:
  ["Ensembler: New Ensemble Scheduled for 2021-12-17 at 1:00PM (PST)",
    "Ensembler: New Ensemble Scheduled for 2021-12-17 at 4:00PM (EST)"]
and others were not expected:
  ["Ensembler: New Ensemble Scheduled for 2021-12-17 at 1:00pm (GMT-08:00)",
    "Ensembler: New Ensemble Scheduled for 2021-12-17 at 4:00pm (GMT-05:00)"]


	at com.jitterted.mobreg.adapter.out.email.EmailToSendEnsembleScheduledNotifierTest.membersInDifferentTimeZonesGetCustomizedEnsembleScheduledEmail

Possible fix

The tests pass if I change the DateTimeFormatter setup in EmailNotifier to contain a specific locale:

private static final DateTimeFormatter LONG_DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("LLLL d, uuuu 'at' h:mma (zzz)", Locale.ENGLISH);
private static final DateTimeFormatter SHORT_DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd 'at' h:mma (zzz)", Locale.ENGLISH);

However, I don't know how you would like to approach this. I suppose, you might want to hard-code English for now?

Send "scheduled" notification even when video conference creation fails

Right now, if the EnsembleService gets a FailedToScheduleMeeting exception, it never sends notifications that the Ensemble was scheduled. Even if the video conference is created later (via the changeTo), no notification is sent.

  • 1. send notification regardless of whether the Zoom is created or not.
  • 2. send notification about change in information for those who Accepted (so they get the right Zoom link)

Design: Multiple groups, priority for accepting, etc.

Question: do I need anything more than the current Set<String> roles? Or can this support:

  1. Priority for registration: higher "tiers" can Accept before lower tiers
  2. Define which Ensemble groups Member is eligible to see
  3. Wait list priority

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.