Skip to content

Commit

Permalink
feat: Add session for event (#2149)
Browse files Browse the repository at this point in the history
Fixes: #1880
  • Loading branch information
anhanh11001 authored and iamareebjamal committed Jul 22, 2019
1 parent ee6004c commit 1af4d3c
Show file tree
Hide file tree
Showing 22 changed files with 645 additions and 65 deletions.
119 changes: 116 additions & 3 deletions app/schemas/org.fossasia.openevent.general.OpenEventDatabase/8.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"formatVersion": 1,
"database": {
"version": 8,
"identityHash": "220a5a8960fa7289b6b6f4a9fe11c92d",
"identityHash": "c65ffea75fee1faf6cd199cbbc5c25ee",
"entities": [
{
"tableName": "Event",
Expand Down Expand Up @@ -1576,7 +1576,7 @@
},
{
"tableName": "Session",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `shortAbstract` TEXT, `comments` TEXT, `longAbstract` TEXT, `level` TEXT, `signupUrl` TEXT, `endsAt` TEXT, `language` TEXT, `title` TEXT, `startsAt` TEXT, `slidesUrl` TEXT, `averageRating` REAL, `submittedAt` TEXT, `deletedAt` TEXT, `subtitle` TEXT, `createdAt` TEXT, `state` TEXT, `lastModifiedAt` TEXT, `videoUrl` TEXT, `audioUrl` TEXT, `sessionType` TEXT, `microlocation` TEXT, `track` TEXT, PRIMARY KEY(`id`))",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `shortAbstract` TEXT, `comments` TEXT, `longAbstract` TEXT, `level` TEXT, `signupUrl` TEXT, `endsAt` TEXT, `language` TEXT, `title` TEXT, `startsAt` TEXT, `slidesUrl` TEXT, `averageRating` REAL, `submittedAt` TEXT, `deletedAt` TEXT, `subtitle` TEXT, `createdAt` TEXT, `state` TEXT, `lastModifiedAt` TEXT, `videoUrl` TEXT, `audioUrl` TEXT, `sessionType` TEXT, `microlocation` TEXT, `track` TEXT, `event` INTEGER, PRIMARY KEY(`id`))",
"fields": [
{
"fieldPath": "id",
Expand Down Expand Up @@ -1715,6 +1715,12 @@
"columnName": "track",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "event",
"columnName": "event",
"affinity": "INTEGER",
"notNull": false
}
],
"primaryKey": {
Expand Down Expand Up @@ -1747,6 +1753,14 @@
"track"
],
"createSql": "CREATE INDEX `index_Session_track` ON `${TABLE_NAME}` (`track`)"
},
{
"name": "index_Session_event",
"unique": false,
"columnNames": [
"event"
],
"createSql": "CREATE INDEX `index_Session_event` ON `${TABLE_NAME}` (`event`)"
}
],
"foreignKeys": []
Expand Down Expand Up @@ -1968,12 +1982,111 @@
},
"indices": [],
"foreignKeys": []
},
{
"tableName": "Proposal",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER, `title` TEXT, `language` TEXT, `shortAbstract` TEXT, `comments` TEXT, `startsAt` TEXT, `endsAt` TEXT, `track` TEXT, `event` INTEGER, `speakers` TEXT NOT NULL, PRIMARY KEY(`id`))",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "title",
"columnName": "title",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "language",
"columnName": "language",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "shortAbstract",
"columnName": "shortAbstract",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "comments",
"columnName": "comments",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "startsAt",
"columnName": "startsAt",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "endsAt",
"columnName": "endsAt",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "track",
"columnName": "track",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "event",
"columnName": "event",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "speakers",
"columnName": "speakers",
"affinity": "TEXT",
"notNull": true
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": false
},
"indices": [
{
"name": "index_Proposal_track",
"unique": false,
"columnNames": [
"track"
],
"createSql": "CREATE INDEX `index_Proposal_track` ON `${TABLE_NAME}` (`track`)"
},
{
"name": "index_Proposal_event",
"unique": false,
"columnNames": [
"event"
],
"createSql": "CREATE INDEX `index_Proposal_event` ON `${TABLE_NAME}` (`event`)"
},
{
"name": "index_Proposal_speakers",
"unique": false,
"columnNames": [
"speakers"
],
"createSql": "CREATE INDEX `index_Proposal_speakers` ON `${TABLE_NAME}` (`speakers`)"
}
],
"foreignKeys": []
}
],
"views": [],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '220a5a8960fa7289b6b6f4a9fe11c92d')"
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'c65ffea75fee1faf6cd199cbbc5c25ee')"
]
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@ import org.fossasia.openevent.general.auth.UserIdConverter
import org.fossasia.openevent.general.event.Event
import org.fossasia.openevent.general.event.EventDao
import org.fossasia.openevent.general.event.EventIdConverter
import org.fossasia.openevent.general.speakercall.SpeakersCall
import org.fossasia.openevent.general.speakercall.SpeakersCallDao
import org.fossasia.openevent.general.event.subtopic.EventSubTopicConverter
import org.fossasia.openevent.general.event.topic.EventTopic
import org.fossasia.openevent.general.event.topic.EventTopicConverter
Expand All @@ -37,10 +35,14 @@ import org.fossasia.openevent.general.settings.SettingsDao
import org.fossasia.openevent.general.social.SocialLink
import org.fossasia.openevent.general.social.SocialLinksDao
import org.fossasia.openevent.general.speakercall.SpeakersCallConverter
import org.fossasia.openevent.general.speakercall.SpeakersCall
import org.fossasia.openevent.general.speakercall.Proposal
import org.fossasia.openevent.general.speakercall.SpeakersCallDao
import org.fossasia.openevent.general.speakers.Speaker
import org.fossasia.openevent.general.speakers.SpeakerDao
import org.fossasia.openevent.general.speakers.SpeakerWithEvent
import org.fossasia.openevent.general.speakers.SpeakerWithEventDao
import org.fossasia.openevent.general.speakers.ListSpeakerIdConverter
import org.fossasia.openevent.general.sponsor.Sponsor
import org.fossasia.openevent.general.sponsor.SponsorDao
import org.fossasia.openevent.general.sponsor.SponsorWithEvent
Expand All @@ -52,11 +54,11 @@ import org.fossasia.openevent.general.ticket.TicketIdConverter
@Database(entities = [Event::class, User::class, SocialLink::class, Ticket::class, Attendee::class,
EventTopic::class, Order::class, CustomForm::class, Speaker::class, SpeakerWithEvent::class, Sponsor::class,
SponsorWithEvent::class, Session::class, SpeakersCall::class, Feedback::class, Notification::class,
Settings::class], version = 8)
Settings::class, Proposal::class], version = 8)
@TypeConverters(EventIdConverter::class, EventTopicConverter::class, EventTypeConverter::class,
EventSubTopicConverter::class, TicketIdConverter::class, MicroLocationConverter::class, UserIdConverter::class,
AttendeeIdConverter::class, ListAttendeeIdConverter::class, SessionTypeConverter::class, TrackConverter::class,
SpeakersCallConverter::class)
SpeakersCallConverter::class, ListSpeakerIdConverter::class)
abstract class OpenEventDatabase : RoomDatabase() {

abstract fun eventDao(): EventDao
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import org.fossasia.openevent.general.event.EVENT_DETAIL_FRAGMENT
import org.fossasia.openevent.general.search.ORDER_COMPLETED_FRAGMENT
import org.fossasia.openevent.general.search.SEARCH_RESULTS_FRAGMENT
import org.fossasia.openevent.general.search.location.SEARCH_LOCATION_FRAGMENT
import org.fossasia.openevent.general.speakercall.SPEAKERS_CALL_FRAGMENT
import org.fossasia.openevent.general.ticket.TICKETS_FRAGMENT
import org.fossasia.openevent.general.utils.Utils.hideSoftKeyboard
import org.fossasia.openevent.general.utils.Utils.show
Expand Down Expand Up @@ -165,6 +166,7 @@ class AuthFragment : Fragment(), ComplexBackPressFragment {
PROFILE_FRAGMENT -> findNavController(rootView).popBackStack(R.id.profileFragment, false)
SEARCH_RESULTS_FRAGMENT -> findNavController(rootView).popBackStack(R.id.searchResultsFragment, false)
ORDER_COMPLETED_FRAGMENT -> findNavController(rootView).popBackStack(R.id.orderCompletedFragment, false)
SPEAKERS_CALL_FRAGMENT -> findNavController(rootView).popBackStack(R.id.speakersCallFragment, false)
else -> findNavController(rootView).navigate(AuthFragmentDirections.actionAuthToEventsPop())
}
}
Expand Down
11 changes: 6 additions & 5 deletions app/src/main/java/org/fossasia/openevent/general/di/Modules.kt
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,6 @@ import org.fossasia.openevent.general.paypal.Paypal
import org.fossasia.openevent.general.paypal.PaypalApi
import org.fossasia.openevent.general.search.location.GeoLocationViewModel
import org.fossasia.openevent.general.search.location.SearchLocationViewModel
import org.fossasia.openevent.general.speakercall.EditSpeakerViewModel
import org.fossasia.openevent.general.speakercall.SpeakersCallProposalViewModel
import org.fossasia.openevent.general.search.time.SearchTimeViewModel
import org.fossasia.openevent.general.search.SearchViewModel
import org.fossasia.openevent.general.search.location.LocationService
Expand Down Expand Up @@ -101,6 +99,9 @@ import org.fossasia.openevent.general.social.SocialLink
import org.fossasia.openevent.general.social.SocialLinkApi
import org.fossasia.openevent.general.social.SocialLinksService
import org.fossasia.openevent.general.speakercall.SpeakersCallViewModel
import org.fossasia.openevent.general.speakercall.SpeakersCallProposalViewModel
import org.fossasia.openevent.general.speakercall.Proposal
import org.fossasia.openevent.general.speakercall.EditSpeakerViewModel
import org.fossasia.openevent.general.speakers.Speaker
import org.fossasia.openevent.general.speakers.SpeakerApi
import org.fossasia.openevent.general.speakers.SpeakerService
Expand Down Expand Up @@ -255,8 +256,8 @@ val viewModelModule = module {
viewModel { SponsorsViewModel(get(), get()) }
viewModel { NotificationViewModel(get(), get(), get(), get()) }
viewModel { AuthViewModel(get(), get(), get()) }
viewModel { SpeakersCallViewModel(get(), get(), get(), get(), get()) }
viewModel { SpeakersCallProposalViewModel(get(), get()) }
viewModel { SpeakersCallViewModel(get(), get(), get(), get(), get(), get()) }
viewModel { SpeakersCallProposalViewModel(get(), get(), get(), get(), get()) }
viewModel { EditSpeakerViewModel(get(), get(), get(), get()) }
viewModel { FeedbackViewModel(get(), get()) }
}
Expand Down Expand Up @@ -309,7 +310,7 @@ val networkModule = module {
EventSubTopic::class.java, Feedback::class.java, Speaker::class.java, FavoriteEvent::class.java,
Session::class.java, SessionType::class.java, MicroLocation::class.java, SpeakersCall::class.java,
Sponsor::class.java, EventFAQ::class.java, Notification::class.java, Track::class.java,
DiscountCode::class.java, Settings::class.java)
DiscountCode::class.java, Settings::class.java, Proposal::class.java)

Retrofit.Builder()
.client(get())
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.fossasia.openevent.general.event

import io.reactivex.Single
import org.fossasia.openevent.general.sessions.track.Track
import org.fossasia.openevent.general.speakercall.SpeakersCall
import retrofit2.http.GET
import retrofit2.http.Path
Expand Down Expand Up @@ -30,4 +31,7 @@ interface EventApi {

@GET("events")
fun eventsByQuery(@Query("filter") filter: String): Single<List<Event>>

@GET("events/{eventId}/tracks")
fun fetchTracksUnderEvent(@Path("eventId") eventId: Long): Single<List<Track>>
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import org.fossasia.openevent.general.event.types.EventType
import org.fossasia.openevent.general.event.types.EventTypesApi
import org.fossasia.openevent.general.favorite.FavoriteEvent
import org.fossasia.openevent.general.favorite.FavoriteEventApi
import org.fossasia.openevent.general.sessions.track.Track
import org.fossasia.openevent.general.speakercall.SpeakersCall
import org.fossasia.openevent.general.speakercall.SpeakersCallDao
import org.jetbrains.anko.collections.forEachWithIndex
Expand Down Expand Up @@ -167,4 +168,6 @@ class EventService(
speakersCallDao.insertSpeakerCall(it)
}
}

fun fetchTracksUnderEvent(eventId: Long): Single<List<Track>> = eventApi.fetchTracksUnderEvent(eventId)
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import com.github.jasminb.jsonapi.LongIdHandler
import com.github.jasminb.jsonapi.annotations.Id
import com.github.jasminb.jsonapi.annotations.Relationship
import com.github.jasminb.jsonapi.annotations.Type
import org.fossasia.openevent.general.event.EventId
import org.fossasia.openevent.general.sessions.microlocation.MicroLocation
import org.fossasia.openevent.general.sessions.sessiontype.SessionType
import org.fossasia.openevent.general.sessions.track.Track
Expand Down Expand Up @@ -43,11 +44,14 @@ data class Session(
val audioUrl: String? = null,
@ColumnInfo(index = true)
@Relationship("session-type", resolve = true)
var sessionType: SessionType? = null,
val sessionType: SessionType? = null,
@ColumnInfo(index = true)
@Relationship("microlocation", resolve = true)
var microlocation: MicroLocation? = null,
val microlocation: MicroLocation? = null,
@ColumnInfo(index = true)
@Relationship("track", resolve = true)
var track: Track? = null
val track: Track? = null,
@ColumnInfo(index = true)
@Relationship("event", resolve = true)
val event: EventId? = null
)
Original file line number Diff line number Diff line change
@@ -1,16 +1,35 @@
package org.fossasia.openevent.general.sessions

import io.reactivex.Single
import org.fossasia.openevent.general.speakercall.Proposal
import retrofit2.http.GET
import retrofit2.http.Path
import retrofit2.http.Query
import retrofit2.http.Body
import retrofit2.http.POST
import retrofit2.http.PATCH

interface SessionApi {

@GET("events/{eventId}/sessions?include=session-type,microlocation,track")
@GET("events/{eventId}/sessions?include=session-type,microlocation,track,event")
fun getSessionsForEvent(
@Path("eventId") eventId: Long,
@Query("sort") sort: String = "created-at",
@Query("filter") sessionName: String = "[]"
): Single<List<Session>>

@POST("sessions?include=track,session-type,event,creator,speakers")
fun createSession(@Body proposal: Proposal): Single<Session>

@PATCH("sessions/{sessionId}")
fun updateSession(@Path("sessionId") sessionId: Long, @Body proposal: Proposal): Single<Session>

@GET("speakers/{speakerId}/sessions?include=session-type,microlocation,track,event")
fun getSessionsUnderSpeaker(
@Path("speakerId") speakerId: Long,
@Query("filter") filter: String
): Single<List<Session>>

@GET("sessions/{sessionId}?include=track,session-type,event,creator,speakers")
fun getSessionById(@Path("sessionId") sessionId: Long): Single<Session>
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package org.fossasia.openevent.general.sessions

import io.reactivex.Flowable
import io.reactivex.Single
import org.fossasia.openevent.general.speakercall.Proposal

class SessionService(
private val sessionApi: SessionApi,
Expand All @@ -15,7 +15,19 @@ class SessionService(
}
}

fun fetchSession(id: Long): Flowable<Session> {
return sessionDao.getSessionById(id)
}
fun fetchSession(id: Long): Single<Session> =
sessionApi.getSessionById(id)

fun createSession(proposal: Proposal): Single<Session> =
sessionApi.createSession(proposal).doOnSuccess {
sessionDao.insertSession(it)
}

fun updateSession(sessionId: Long, proposal: Proposal): Single<Session> =
sessionApi.updateSession(sessionId, proposal).doOnSuccess {
sessionDao.insertSession(it)
}

fun getSessionsUnderSpeakerAndEvent(speakerId: Long, query: String): Single<List<Session>> =
sessionApi.getSessionsUnderSpeaker(speakerId, filter = query)
}
Loading

0 comments on commit 1af4d3c

Please sign in to comment.