Skip to content

Commit

Permalink
details and groups on home page
Browse files Browse the repository at this point in the history
  • Loading branch information
mpoegel committed May 9, 2024
1 parent 8fbcb85 commit 6410bad
Show file tree
Hide file tree
Showing 6 changed files with 72 additions and 22 deletions.
26 changes: 16 additions & 10 deletions pkg/pizza/server.go
Expand Up @@ -201,33 +201,39 @@ func (s *Server) HandleIndex(w http.ResponseWriter, r *http.Request) {

estZone, _ := time.LoadLocation("America/New_York")
data.FridayTimes = make([]IndexFridayData, 0)
for i, friday := range fridays {
for _, friday := range fridays {
if friday.Group != nil && !claims.InGroup(*friday.Group) {
// skip friday when the user is not in the invited group
continue
}
data.FridayTimes = append(data.FridayTimes, IndexFridayData{})

fData := IndexFridayData{}
t := friday.Date
t = t.In(estZone)
data.FridayTimes[i].Date = t.Format(time.RFC822)
data.FridayTimes[i].ID = t.Unix()
fData.Date = t.Format(time.RFC822)
fData.ID = t.Unix()
if friday.Details != nil {
fData.Details = *friday.Details
}

eventID := strconv.FormatInt(data.FridayTimes[i].ID, 10)
eventID := strconv.FormatInt(fData.ID, 10)
// get the calendar event to see who has already RSVP'ed
if event, err := s.calendar.GetEvent(eventID); err != nil && err != ErrEventNotFound {
Log.Warn("failed to get calendar event", zap.Error(err), zap.String("eventID", eventID))
data.FridayTimes[i].Guests = make([]string, 0)
fData.Guests = make([]string, 0)
} else if err != nil {
data.FridayTimes[i].Guests = make([]string, 0)
fData.Guests = make([]string, 0)
} else {
data.FridayTimes[i].Guests = make([]string, len(event.Attendees))
fData.Guests = make([]string, len(event.Attendees))
for k, email := range event.Attendees {
if name, err := s.store.GetFriendName(email); err != nil {
data.FridayTimes[i].Guests[k] = email
fData.Guests[k] = email
} else {
data.FridayTimes[i].Guests[k] = name
fData.Guests[k] = name
}
}
}
data.FridayTimes = append(data.FridayTimes, fData)
}
}

Expand Down
40 changes: 33 additions & 7 deletions pkg/pizza/server_admin.go
Expand Up @@ -60,6 +60,7 @@ func (s *Server) HandleAdmin(w http.ResponseWriter, r *http.Request) {

allFridays := getFutureFridays()
setFridays, err := s.store.GetUpcomingFridays(futureFridayLimit)
Log.Info("loaded data", zap.Any("fridays", setFridays))
if err != nil {
Log.Error("failed to get fridays", zap.Error(err))
s.Handle500(w, r)
Expand All @@ -78,6 +79,12 @@ func (s *Server) HandleAdmin(w http.ResponseWriter, r *http.Request) {
}
if fridayIndex < len(setFridays) && friday.Equal(setFridays[fridayIndex].Date) {
f.Active = true
if setFridays[fridayIndex].Group != nil {
f.Group = *setFridays[fridayIndex].Group
}
if setFridays[fridayIndex].Details != nil {
f.Details = *setFridays[fridayIndex].Details
}
fridayIndex++
}

Expand Down Expand Up @@ -138,27 +145,46 @@ func (s *Server) HandleAdminEdit(w http.ResponseWriter, r *http.Request) {
w.Write(getToast("parse error"))
return
}
f := time.Unix(num, 0).In(loc)

if exists, err := s.store.DoesFridayExist(f); err != nil {
friday := Friday{
Date: time.Unix(num, 0).In(loc),
Group: nil,
Details: nil,
}
if len(group) > 0 && group[0] != "" {
friday.Group = &group[0]
}
if len(details) > 0 && details[0] != "" {
friday.Details = &details[0]
}

if exists, err := s.store.DoesFridayExist(friday.Date); err != nil {
Log.Error("failed check friday", zap.Error(err))
} else if needsActivation && !exists {
err := s.store.AddFriday(f)
err := s.store.AddFriday(friday.Date)
if err != nil {
Log.Error("failed to add friday", zap.Error(err))
w.Write(getToast("failed to add friday"))
} else if err = s.store.UpdateFriday(friday); err != nil {
Log.Error("failed to update friday", zap.Error(err))
w.Write(getToast("failed to update friday"))
} else {
Log.Info("added friday", zap.Time("date", f))
Log.Info("added friday", zap.Any("friday", friday))
w.Write(getToast("added friday"))
}
} else if !needsActivation && exists {
err := s.store.RemoveFriday(f)
err := s.store.RemoveFriday(friday.Date)
if err != nil {
Log.Error("failed to remove friday", zap.Error(err))
} else {
Log.Info("removed friday", zap.Time("date", f))
Log.Info("removed friday", zap.Time("date", friday.Date))
w.Write(getToast("removed friday"))
}
} else if err = s.store.UpdateFriday(friday); err != nil {
Log.Error("failed to update friday", zap.Error(err))
w.Write(getToast("failed to update friday"))
} else {
w.Write(getToast("no changes"))
Log.Info("updated", zap.Any("friday", friday))
w.Write(getToast("updated friday"))
}
}
9 changes: 9 additions & 0 deletions pkg/pizza/sql_accessor.go
Expand Up @@ -212,3 +212,12 @@ func (a *SQLAccessor) RemoveFriday(date time.Time) error {
_, err = stmt.Exec(date)
return err
}

func (a *SQLAccessor) UpdateFriday(friday Friday) error {
stmt, err := a.db.Prepare("UPDATE fridays SET invited_group=?, details=? WHERE start_time=?")
if err != nil {
return nil
}
_, err = stmt.Exec(friday.Group, friday.Details, friday.Date)
return err
}
2 changes: 1 addition & 1 deletion pkg/pizza/store.go
Expand Up @@ -17,7 +17,7 @@ type Accessor interface {
ListFridays() ([]Friday, error)
RemoveFriend(email string) error
RemoveFriday(date time.Time) error
// UpdateFriday(friday Friday) error
UpdateFriday(friday Friday) error
}

type Friend struct {
Expand Down
11 changes: 10 additions & 1 deletion static/css/index.css
Expand Up @@ -44,6 +44,10 @@ a {
padding-bottom: 5px;
}

.friday-details {
padding: 5px;
}

.btn {
color: black;
}
Expand All @@ -68,7 +72,7 @@ a {
@media (max-width: 600px) {
body {
font-size: 1.5em;
width: 100%;
width: 90%;
}

#friday-table {
Expand All @@ -81,6 +85,11 @@ a {
font-size: 1.1em;
}

.btn-rsvp {
display: flex;
justify-content: center;
}

.guestLevel {
width: 80%;
}
Expand Down
6 changes: 3 additions & 3 deletions static/html/index.html
Expand Up @@ -18,8 +18,8 @@ <h2>RSVP For Pizza</h2>
<tr>
<td class="friday-time">
<label for="{{.Date}}">{{.Date}}</label><br>
<div class="guestLevel">{{range .Guests}}<span class="guest" title="{{.}}">&nbsp;</span>{{end}}<br>
</div>
<div class="guestLevel">{{range .Guests}}<span class="guest" title="{{.}}">&nbsp;</span>{{end}}</div>
<span class="friday-details"><i>{{.Details}}</i></span>
<div class="btn-rsvp">
<button class="btn" hx-post="/rsvp?date={{.ID}}" hx-swap="outerHTML">RSVP</button>
</div>
Expand All @@ -40,4 +40,4 @@ <h2>RSVP For Pizza</h2>

</body>

</html>
</html>

0 comments on commit 6410bad

Please sign in to comment.