From 00158e89fe597dcfe0128442f9199372e0f96803 Mon Sep 17 00:00:00 2001 From: Vojtech Mares Date: Sat, 27 Apr 2024 21:31:04 +0200 Subject: [PATCH] feat: add pkg/training/ with types, structs, and repository interfaces --- pkg/training/attendee.go | 17 +++++++++++++++++ pkg/training/attendee_repository.go | 13 +++++++++++++ pkg/training/date.go | 22 ++++++++++++++++++++++ pkg/training/date_repository.go | 11 +++++++++++ pkg/training/feedback.go | 14 ++++++++++++++ pkg/training/feedback_repository.go | 9 +++++++++ pkg/training/price.go | 3 +++ pkg/training/repository.go | 9 +++++++++ pkg/training/training.go | 15 +++++++++++++++ 9 files changed, 113 insertions(+) create mode 100644 pkg/training/attendee.go create mode 100644 pkg/training/attendee_repository.go create mode 100644 pkg/training/date.go create mode 100644 pkg/training/date_repository.go create mode 100644 pkg/training/feedback.go create mode 100644 pkg/training/feedback_repository.go create mode 100644 pkg/training/price.go create mode 100644 pkg/training/repository.go create mode 100644 pkg/training/training.go diff --git a/pkg/training/attendee.go b/pkg/training/attendee.go new file mode 100644 index 0000000..9e7c923 --- /dev/null +++ b/pkg/training/attendee.go @@ -0,0 +1,17 @@ +package training + +import "github.com/google/uuid" + +type AttendeeID uuid.UUID + +type Attendee struct { + ID AttendeeID + DateID DateID + Name string + Email string + Company string + Role string + IsStudent bool + HasAttended bool + HasPaid bool +} diff --git a/pkg/training/attendee_repository.go b/pkg/training/attendee_repository.go new file mode 100644 index 0000000..37a8ac6 --- /dev/null +++ b/pkg/training/attendee_repository.go @@ -0,0 +1,13 @@ +package training + +type AttendeeRepository interface { + Find(AttendeeID) (*Attendee, error) + FindAll() ([]Attendee, error) + FindAllForDate(DateID) ([]Attendee, error) + CountForDate(DateID) (int, error) + Save(*Attendee) error + Update(*Attendee) error + UpdateAttendance(AttendeeID, bool) error + UpdatePayment(AttendeeID, bool) error + Delete(AttendeeID) error +} diff --git a/pkg/training/date.go b/pkg/training/date.go new file mode 100644 index 0000000..dd283b0 --- /dev/null +++ b/pkg/training/date.go @@ -0,0 +1,22 @@ +package training + +import ( + "time" + + "github.com/google/uuid" +) + +type DateID uuid.UUID + +type Date struct { + ID DateID + TrainingID ID + Date time.Time + StartTime time.Time + Days int8 + Price Price + IsOnline bool + Location string // could be empty (null) for example: Prague, Brno, London, ... + Address string // could be empty (null) + Capacity int8 +} diff --git a/pkg/training/date_repository.go b/pkg/training/date_repository.go new file mode 100644 index 0000000..06d6990 --- /dev/null +++ b/pkg/training/date_repository.go @@ -0,0 +1,11 @@ +package training + +type DateRepository interface { + Get(DateID) (*Date, error) + FindAll() ([]Date, error) + FindAllForTraining(ID) ([]Date, error) + Save(*Date) error + Update(*Date) error + Delete(DateID) error + IsFull(DateID) (bool, error) +} diff --git a/pkg/training/feedback.go b/pkg/training/feedback.go new file mode 100644 index 0000000..4b7a5dd --- /dev/null +++ b/pkg/training/feedback.go @@ -0,0 +1,14 @@ +package training + +import "github.com/google/uuid" + +type FeedbackID uuid.UUID + +type Feedback struct { + ID FeedbackID + AttendeeID AttendeeID + Rating int + Comment string + IsAnonymous bool + IsSharingAllowed bool +} diff --git a/pkg/training/feedback_repository.go b/pkg/training/feedback_repository.go new file mode 100644 index 0000000..a239768 --- /dev/null +++ b/pkg/training/feedback_repository.go @@ -0,0 +1,9 @@ +package training + +type FeedbackRepository interface { + Get(FeedbackID) (*Feedback, error) + FindAll() ([]Feedback, error) + Save(*Feedback) error + Update(*Feedback) error + Delete(FeedbackID) error +} diff --git a/pkg/training/price.go b/pkg/training/price.go new file mode 100644 index 0000000..7c19588 --- /dev/null +++ b/pkg/training/price.go @@ -0,0 +1,3 @@ +package training + +type Price float32 diff --git a/pkg/training/repository.go b/pkg/training/repository.go new file mode 100644 index 0000000..e623fcd --- /dev/null +++ b/pkg/training/repository.go @@ -0,0 +1,9 @@ +package training + +type Repository interface { + Save(*Training) error + Get(ID) (*Training, error) + Update(*Training) error + Delete(ID) error + FindAll() ([]Training, error) +} diff --git a/pkg/training/training.go b/pkg/training/training.go new file mode 100644 index 0000000..8e89aa1 --- /dev/null +++ b/pkg/training/training.go @@ -0,0 +1,15 @@ +package training + +import ( + "github.com/google/uuid" +) + +type ID uuid.UUID + +type Training struct { + ID ID + Days int8 + Name string + Description string + Price Price +}