diff --git a/app/Observers/EventObserver.php b/app/Observers/EventObserver.php
new file mode 100644
index 0000000..9751a2a
--- /dev/null
+++ b/app/Observers/EventObserver.php
@@ -0,0 +1,32 @@
+name;
+ $affected = ['events' => [$event->id]];
+ auditionLog($message, $affected);
+ }
+
+ public function updated(Event $event): void
+ {
+ $message = 'Renamed event '.$event->getOriginal('name').' to '.$event->name;
+ $affected = [
+ 'events' => [$event->id],
+ 'auditions' => $event->auditions->pluck('id')->toArray(),
+ ];
+ auditionLog($message, $affected);
+ }
+
+ public function deleted(Event $event): void
+ {
+ $message = 'Removed event '.$event->name;
+ $affected = ['events' => [$event->id]];
+ auditionLog($message, $affected);
+ }
+}
diff --git a/app/Observers/SchoolObserver.php b/app/Observers/SchoolObserver.php
new file mode 100644
index 0000000..a749632
--- /dev/null
+++ b/app/Observers/SchoolObserver.php
@@ -0,0 +1,33 @@
+name;
+ $message .= '
'.$school->address;
+ $message .= '
'.$school->city.', '.$school->state.' '.$school->zip;
+ $affected = ['schools' => [$school->id]];
+ auditionLog($message, $affected);
+ }
+
+ public function updated(School $school): void
+ {
+ $message = 'Updated school '.$school->name;
+ $message .= '
'.$school->address;
+ $message .= '
'.$school->city.', '.$school->state.' '.$school->zip;
+ $affected = ['schools' => [$school->id]];
+ auditionLog($message, $affected);
+ }
+
+ public function deleted(School $school): void
+ {
+ $message = 'Removed school '.$school->name;
+ $affected = ['schools' => [$school->id]];
+ auditionLog($message, $affected);
+ }
+}
diff --git a/app/Observers/UserObserver.php b/app/Observers/UserObserver.php
new file mode 100644
index 0000000..13ba691
--- /dev/null
+++ b/app/Observers/UserObserver.php
@@ -0,0 +1,66 @@
+full_name();
+ if ($user->school_id) {
+ $message .= '
School: '.$user->school->name;
+ }
+ $message .= '
Email: '.$user->email;
+ $message .= '
Phone: '.$user->cell_phone;
+ $message .= '
Judging Pref: '.$user->judging_preference;
+ $message .= '
Admin Privileges: '.$user->is_admin ? 'Yes' : 'No';
+ $message .= '
Tabulator Privileges: '.$user->is_tab ? 'Yes' : 'No';
+ $affected = ['users' => [$user->id]];
+ auditionLog($message, $affected);
+ }
+
+ public function updated(User $user): void
+ {
+ $message = 'Updated User '.$user->full_name().'< '.$user->getOriginal('email').' >';
+
+ if ($user->isDirty('school_id') && $user->school_id) {
+ $message .= '
School: '.$user->school->name;
+ }
+
+ if ($user->isDirty('school_id') && ! $user->school_id) {
+ $message .= '
School: NONE';
+ }
+
+ if ($user->isDirty('email')) {
+ $message .= '
Email: '.$user->email;
+ }
+
+ if ($user->isDirty('cell_phone')) {
+ $message .= '
Phone: '.$user->cell_phone;
+ }
+
+ if ($user->isDirty('judging_preference')) {
+ $message .= '
Judging Pref: '.$user->judging_preference;
+ }
+
+ if ($user->isDirty('is_admin')) {
+ $message .= '
Admin Privileges: '.($user->is_admin ? 'Yes' : 'No');
+ }
+
+ if ($user->isDirty('is_tab')) {
+ $message .= '
Tabulator Privileges: '.($user->is_tab ? 'Yes' : 'No');
+ }
+
+ $affected = ['users' => [$user->id]];
+ auditionLog($message, $affected);
+ }
+
+ public function deleted(User $user): void
+ {
+ $message = 'Removed User '.$user->full_name().' <'.$user->email.' >';
+ $affected = ['users' => [$user->id]];
+ auditionLog($message, $affected);
+ }
+}