Skip to content

Commit

Permalink
Location Searching, Fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
jabbate19 committed Oct 13, 2024
1 parent cebf6a4 commit 1548cd2
Show file tree
Hide file tree
Showing 17 changed files with 411 additions and 210 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ A Proper Rideboard.

`cd $PROJECT_ROOT`

`docker run -it --rm -e 5432:5432 -d ./src/migrations:/docker-entrypoint-initdb.d -e POSTGRES_USER=rideboard -e POSTGRES_DATABASE=rideboard -e POSTGRES_PASSWORD=supersecurepassword postgres`
`docker run -it --rm -p 5432:5432 -v ./src/migrations:/docker-entrypoint-initdb.d -e POSTGRES_USER=rideboard -e POSTGRES_DATABASE=rideboard -e POSTGRES_PASSWORD=supersecurepassword postgres`

#### Setup .env

Expand Down
2 changes: 1 addition & 1 deletion src/api/v1/auth/csh.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ async fn login(data: web::Data<AppState>) -> impl Responder {
#[derive(Deserialize, ToSchema)]
pub struct AuthRequest {
code: String,
_state: String,
state: String,
}

#[utoipa::path(
Expand Down
2 changes: 1 addition & 1 deletion src/api/v1/auth/google.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ async fn login(data: web::Data<AppState>) -> impl Responder {
#[derive(Deserialize, ToSchema)]
pub struct AuthRequest {
code: String,
_state: String,
state: String,
}

#[utoipa::path(
Expand Down
2 changes: 1 addition & 1 deletion src/api/v1/event/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ async fn get_all_events(
) -> impl Responder {
let past: bool = params.past.unwrap_or(false);

let result = query_as!(Event, r#"SELECT event.id, event.name, event.location, event.start_time, event.end_time, (users.id, users.name) AS "creator!: UserData" FROM event JOIN users ON users.id = event.creator WHERE (start_time >= NOW() AND $1 = False) OR (start_time < NOW() AND $1) ORDER BY start_time ASC"#, past)
let result = query_as!(Event, r#"SELECT event.id, event.name, event.location, event.start_time, event.end_time, (users.id, users.name) AS "creator!: UserData" FROM event JOIN users ON users.id = event.creator WHERE (end_time >= NOW() AND $1 = False) OR (end_time < NOW() AND $1) ORDER BY start_time ASC"#, past)
.fetch_all(&data.db)
.await;

Expand Down
1 change: 0 additions & 1 deletion src/frontend/src/components/AddCarButton.vue
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,6 @@ import { usePopupStore } from '@/stores/popup';
export default defineComponent({
data() {
const eventStore = useEventStore();
console.log(eventStore.selectedEvent!.startTime);
const carDeparture = format(
new Date(eventStore.selectedEvent!.startTime).toLocaleString(),
"yyyy-MM-dd'T'HH:mm:ss"
Expand Down
6 changes: 4 additions & 2 deletions src/frontend/src/components/CarDetail.vue
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@ import LeaveCarButton from './LeaveCarButton.vue';
<template>
<div class="m-1">
<h5>Driver Comment:</h5>
<p>{{ car!.comment }}</p>
<p v-if="car!.comment.length != 0">{{ car!.comment }}</p>
<p v-else><i>No Comment Provided</i></p>
<h5>Passengers:</h5>
<ul class="no-bullets">
<ul class="no-bullets" v-if="car!.riders.length != 0">
<li v-for="(rider, index) in car!.riders" :key="index">{{ rider.name }}</li>
</ul>
<p v-else><i>No Riders</i></p>
<LeaveCarButton v-if="userInCar" :carId="car!.id" />
<JoinCarButton
v-else-if="car!.riders.length < car!.maxCapacity && userCanJoinCar"
Expand Down
19 changes: 1 addition & 18 deletions src/frontend/src/components/CarTable.vue
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
<script lang="ts" setup>
import AddCarButton from './AddCarButton.vue';
import UpdateCarButton from './EditCarButton.vue';
import CarRowGroup from './CarRowGroup.vue';
import LeaveCarModal from './LeaveCarModal.vue';
import Loading from './LoadingWheel.vue';
Expand All @@ -11,10 +9,6 @@ const eventStore = useEventStore();
<template>
<Loading v-if="loading" />
<div v-else>
<div v-if="!historyMode">
<AddCarButton v-if="userCar == null" />
<UpdateCarButton v-else :car="userCar" />
</div>
<table class="table">
<thead>
<tr>
Expand All @@ -40,8 +34,7 @@ const eventStore = useEventStore();

<script lang="ts">
import { PopupType, type Car } from '@/models';
import { defineComponent, inject } from 'vue';
import { useAuthStore } from '@/stores/auth';
import { defineComponent } from 'vue';
import { useEventStore } from '@/stores/events';
import { usePopupStore } from '@/stores/popup';
Expand All @@ -51,19 +44,9 @@ export default defineComponent({
},
data() {
return {
historyMode: inject('historyMode'),
loading: true
};
},
computed: {
userCar() {
const eventStore = useEventStore();
const authStore = useAuthStore();
return eventStore.selectedEvent?.cars
?.filter((car) => car.driver.id === authStore.user?.id)
.pop();
}
},
methods: {
async fetchCarData() {
try {
Expand Down
155 changes: 2 additions & 153 deletions src/frontend/src/components/CreateEventButton.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<script setup lang="ts">
import IconPlus from './icons/IconPlus.vue';
import CreateEventModal from './CreateEventModal.vue';
</script>

<template>
Expand All @@ -11,157 +12,5 @@ import IconPlus from './icons/IconPlus.vue';
>
<IconPlus />
</button>
<div
class="modal fade"
id="createEventModal"
tabindex="-1"
role="dialog"
aria-labelledby="createEventModalLabel"
aria-hidden="true"
>
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="createEventModalLabel">Create Event</h4>
<button type="button" class="close" data-bs-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="form-group">
<label for="CreateEventTitle">Event Title</label>
<input
v-model="eventTitle"
class="form-control"
id="CreateEventTitle"
placeholder="My Super Cool Event"
/>
</div>
<div class="form-group">
<label for="CreateEventLocation">Location</label>
<input
v-model="eventLocation"
class="form-control"
id="CreateEventLocation"
placeholder="DSP 3"
/>
</div>
<div class="form-group">
<label for="CreateEventStart">Start Time</label>
<input
v-model="eventStart"
type="datetime-local"
class="form-control"
id="CreateEventStart"
/>
</div>
<div class="form-group">
<label for="CreateEventEnd">End Time</label>
<input
v-model="eventEnd"
type="datetime-local"
class="form-control"
id="CreateEventEnd"
/>
</div>
</div>
<div class="modal-footer">
<button
type="button"
id="createEventClose"
class="btn btn-secondary"
data-bs-dismiss="modal"
>
Close
</button>
<button type="button" class="btn btn-primary" @click="createEvent">Create</button>
</div>
</div>
</div>
</div>
<CreateEventModal />
</template>

<script lang="ts">
import { defineComponent } from 'vue';
import { useEventStore } from '@/stores/events';
import { useAuthStore } from '@/stores/auth';
import { usePopupStore } from '@/stores/popup';
import { PopupType } from '@/models';
export default defineComponent({
data() {
return {
eventTitle: '',
eventLocation: '',
eventStart: '',
eventEnd: ''
};
},
methods: {
async createEvent() {
const popupStore = usePopupStore();
try {
if (
this.eventTitle.length == 0 ||
this.eventLocation.length == 0 ||
this.eventStart.length == 0 ||
this.eventEnd.length == 0
) {
popupStore.addPopup(PopupType.Danger, 'Please fill in all fields.');
return;
}
const data = {
name: this.eventTitle,
location: this.eventLocation,
startTime: new Date(this.eventStart).toISOString(),
endTime: new Date(this.eventEnd).toISOString()
};
const response = await fetch('/api/v1/event/', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
});
if (!response.ok) {
popupStore.addPopup(PopupType.Danger, `Failed to Create Event (${response.status})`);
return;
}
const result = await response.json();
const eventStore = useEventStore();
const authStore = useAuthStore();
const newEvent = {
id: result,
name: data.name,
location: data.location,
startTime: new Date(data.startTime),
endTime: new Date(data.endTime),
creator: {
id: authStore.user!.id,
name: authStore.user!.given_name + ' ' + authStore.user!.family_name
}
};
eventStore.addEvent(newEvent);
eventStore.selectEvent(newEvent);
popupStore.addPopup(PopupType.Success, 'Event Created!');
this.closeModal();
} catch (error) {
console.error(error);
popupStore.addPopup(PopupType.Danger, 'Failed to Create Event. An unknown error occured.');
}
},
closeModal() {
const closeButton = document.getElementById('createEventClose');
closeButton?.click();
}
}
});
</script>

<style scoped>
svg {
height: 1.5em;
}
</style>
Loading

0 comments on commit 1548cd2

Please sign in to comment.