mirror of
https://github.com/Ocelot-Social-Community/Ocelot-Social.git
synced 2025-12-13 07:46:06 +00:00
Merge branch 'fix-post-type-on-notifications' into 6044-Add-create-New-Event
This commit is contained in:
commit
04d642a4da
@ -38,10 +38,8 @@ export const createPostMutation = () => {
|
|||||||
id
|
id
|
||||||
}
|
}
|
||||||
eventStart
|
eventStart
|
||||||
eventEnd
|
|
||||||
eventLocationName
|
eventLocationName
|
||||||
eventVenue
|
eventVenue
|
||||||
eventIsOnline
|
|
||||||
eventLocation {
|
eventLocation {
|
||||||
lng
|
lng
|
||||||
lat
|
lat
|
||||||
|
|||||||
@ -5,16 +5,11 @@ export const validateEventParams = (params) => {
|
|||||||
const { eventInput } = params
|
const { eventInput } = params
|
||||||
validateEventDate(eventInput.eventStart)
|
validateEventDate(eventInput.eventStart)
|
||||||
params.eventStart = eventInput.eventStart
|
params.eventStart = eventInput.eventStart
|
||||||
if (eventInput.eventEnd) {
|
|
||||||
validateEventEnd(eventInput.eventStart, eventInput.eventEnd)
|
|
||||||
params.eventEnd = eventInput.eventEnd
|
|
||||||
}
|
|
||||||
if (eventInput.eventLocation && !eventInput.eventVenue) {
|
if (eventInput.eventLocation && !eventInput.eventVenue) {
|
||||||
throw new UserInputError('Event venue must be present if event location is given!')
|
throw new UserInputError('Event venue must be present if event location is given!')
|
||||||
}
|
}
|
||||||
params.eventVenue = eventInput.eventVenue
|
params.eventVenue = eventInput.eventVenue
|
||||||
params.eventLocation = eventInput.eventLocation
|
params.eventLocation = eventInput.eventLocation
|
||||||
params.eventIsOnline = !!eventInput.eventIsOnline
|
|
||||||
}
|
}
|
||||||
delete params.eventInput
|
delete params.eventInput
|
||||||
let locationName
|
let locationName
|
||||||
@ -38,12 +33,3 @@ const validateEventDate = (dateString) => {
|
|||||||
throw new UserInputError('Event start date must be in the future!')
|
throw new UserInputError('Event start date must be in the future!')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const validateEventEnd = (start, end) => {
|
|
||||||
const endDate = new Date(end)
|
|
||||||
if (endDate.toString() === 'Invalid Date')
|
|
||||||
throw new UserInputError('Event end date must be a valid date!')
|
|
||||||
const startDate = new Date(start)
|
|
||||||
if (endDate < startDate)
|
|
||||||
throw new UserInputError('Event end date must be a after event start date!')
|
|
||||||
}
|
|
||||||
|
|||||||
@ -51,7 +51,7 @@ export default {
|
|||||||
OPTIONAL MATCH (resource)<-[membership:MEMBER_OF]-(relatedUser)
|
OPTIONAL MATCH (resource)<-[membership:MEMBER_OF]-(relatedUser)
|
||||||
WITH user, notification, resource, membership, relatedUser,
|
WITH user, notification, resource, membership, relatedUser,
|
||||||
[(resource)<-[:WROTE]-(author:User) | author {.*}] AS authors,
|
[(resource)<-[:WROTE]-(author:User) | author {.*}] AS authors,
|
||||||
[(resource)-[:COMMENTS]->(post:Post)<-[:WROTE]-(author:User) | post {.*, author: properties(author)} ] AS posts
|
[(resource)-[:COMMENTS]->(post:Post)<-[:WROTE]-(author:User) | post {.*, author: properties(author), postType: filter(l IN labels(post) WHERE NOT l = "Post")} ] AS posts
|
||||||
WITH resource, user, notification, authors, posts, relatedUser, membership,
|
WITH resource, user, notification, authors, posts, relatedUser, membership,
|
||||||
resource {.*,
|
resource {.*,
|
||||||
__typename: labels(resource)[0],
|
__typename: labels(resource)[0],
|
||||||
@ -90,7 +90,7 @@ export default {
|
|||||||
SET notification.read = TRUE
|
SET notification.read = TRUE
|
||||||
WITH user, notification, resource,
|
WITH user, notification, resource,
|
||||||
[(resource)<-[:WROTE]-(author:User) | author {.*}] AS authors,
|
[(resource)<-[:WROTE]-(author:User) | author {.*}] AS authors,
|
||||||
[(resource)-[:COMMENTS]->(post:Post)<-[:WROTE]-(author:User) | post{.*, author: properties(author)} ] AS posts
|
[(resource)-[:COMMENTS]->(post:Post)<-[:WROTE]-(author:User) | post{.*, author: properties(author), postType: filter(l IN labels(post) WHERE NOT l = "Post")} ] AS posts
|
||||||
OPTIONAL MATCH (resource)<-[membership:MEMBER_OF]-(user)
|
OPTIONAL MATCH (resource)<-[membership:MEMBER_OF]-(user)
|
||||||
WITH resource, user, notification, authors, posts, membership,
|
WITH resource, user, notification, authors, posts, membership,
|
||||||
resource {.*, __typename: labels(resource)[0], author: authors[0], post: posts[0], myRole: membership.role } AS finalResource
|
resource {.*, __typename: labels(resource)[0], author: authors[0], post: posts[0], myRole: membership.role } AS finalResource
|
||||||
@ -120,7 +120,7 @@ export default {
|
|||||||
SET notification.read = TRUE
|
SET notification.read = TRUE
|
||||||
WITH user, notification, resource,
|
WITH user, notification, resource,
|
||||||
[(resource)<-[:WROTE]-(author:User) | author {.*}] AS authors,
|
[(resource)<-[:WROTE]-(author:User) | author {.*}] AS authors,
|
||||||
[(resource)-[:COMMENTS]->(post:Post)<-[:WROTE]-(author:User) | post{.*, author: properties(author)} ] AS posts
|
[(resource)-[:COMMENTS]->(post:Post)<-[:WROTE]-(author:User) | post{.*, author: properties(author), postType: filter(l IN labels(post) WHERE NOT l = "Post")} ] AS posts
|
||||||
OPTIONAL MATCH (resource)<-[membership:MEMBER_OF]-(user)
|
OPTIONAL MATCH (resource)<-[membership:MEMBER_OF]-(user)
|
||||||
WITH resource, user, notification, authors, posts, membership,
|
WITH resource, user, notification, authors, posts, membership,
|
||||||
resource {.*, __typename: labels(resource)[0], author: authors[0], post: posts[0], myRole: membership.role} AS finalResource
|
resource {.*, __typename: labels(resource)[0], author: authors[0], post: posts[0], myRole: membership.role} AS finalResource
|
||||||
|
|||||||
@ -416,8 +416,6 @@ export default {
|
|||||||
'eventLocation',
|
'eventLocation',
|
||||||
'eventLocationName',
|
'eventLocationName',
|
||||||
'eventStart',
|
'eventStart',
|
||||||
'eventEnd',
|
|
||||||
'eventIsOnline',
|
|
||||||
],
|
],
|
||||||
hasMany: {
|
hasMany: {
|
||||||
tags: '-[:TAGGED]->(related:Tag)',
|
tags: '-[:TAGGED]->(related:Tag)',
|
||||||
|
|||||||
@ -398,113 +398,6 @@ describe('CreatePost', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('with valid start date and invalid end date', () => {
|
|
||||||
it('throws an error', async () => {
|
|
||||||
const now = new Date()
|
|
||||||
await expect(
|
|
||||||
mutate({
|
|
||||||
mutation: createPostMutation(),
|
|
||||||
variables: {
|
|
||||||
...variables,
|
|
||||||
postType: 'Event',
|
|
||||||
eventInput: {
|
|
||||||
eventStart: new Date(now.getFullYear(), now.getMonth() + 1).toISOString(),
|
|
||||||
eventEnd: 'not-valid',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
).resolves.toMatchObject({
|
|
||||||
errors: [
|
|
||||||
{
|
|
||||||
message: 'Event end date must be a valid date!',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('with valid start date and end date before start date', () => {
|
|
||||||
it('throws an error', async () => {
|
|
||||||
const now = new Date()
|
|
||||||
await expect(
|
|
||||||
mutate({
|
|
||||||
mutation: createPostMutation(),
|
|
||||||
variables: {
|
|
||||||
...variables,
|
|
||||||
postType: 'Event',
|
|
||||||
eventInput: {
|
|
||||||
eventStart: new Date(now.getFullYear(), now.getMonth() + 2).toISOString(),
|
|
||||||
eventEnd: new Date(now.getFullYear(), now.getMonth() + 1).toISOString(),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
).resolves.toMatchObject({
|
|
||||||
errors: [
|
|
||||||
{
|
|
||||||
message: 'Event end date must be a after event start date!',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('with valid start date and valid end date', () => {
|
|
||||||
it('creates the event', async () => {
|
|
||||||
const now = new Date()
|
|
||||||
await expect(
|
|
||||||
mutate({
|
|
||||||
mutation: createPostMutation(),
|
|
||||||
variables: {
|
|
||||||
...variables,
|
|
||||||
postType: 'Event',
|
|
||||||
eventInput: {
|
|
||||||
eventStart: new Date(now.getFullYear(), now.getMonth() + 1).toISOString(),
|
|
||||||
eventEnd: new Date(now.getFullYear(), now.getMonth() + 2).toISOString(),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
).resolves.toMatchObject({
|
|
||||||
data: {
|
|
||||||
CreatePost: {
|
|
||||||
postType: ['Event'],
|
|
||||||
eventStart: new Date(now.getFullYear(), now.getMonth() + 1).toISOString(),
|
|
||||||
eventEnd: new Date(now.getFullYear(), now.getMonth() + 2).toISOString(),
|
|
||||||
eventIsOnline: false,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
errors: undefined,
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('with valid start date and event is online', () => {
|
|
||||||
it('creates the event', async () => {
|
|
||||||
const now = new Date()
|
|
||||||
await expect(
|
|
||||||
mutate({
|
|
||||||
mutation: createPostMutation(),
|
|
||||||
variables: {
|
|
||||||
...variables,
|
|
||||||
postType: 'Event',
|
|
||||||
eventInput: {
|
|
||||||
eventStart: new Date(now.getFullYear(), now.getMonth() + 1).toISOString(),
|
|
||||||
eventIsOnline: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
).resolves.toMatchObject({
|
|
||||||
data: {
|
|
||||||
CreatePost: {
|
|
||||||
postType: ['Event'],
|
|
||||||
eventStart: new Date(now.getFullYear(), now.getMonth() + 1).toISOString(),
|
|
||||||
eventIsOnline: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
errors: undefined,
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('event location is given but event venue is missing', () => {
|
describe('event location is given but event venue is missing', () => {
|
||||||
it('throws an error', async () => {
|
it('throws an error', async () => {
|
||||||
const now = new Date()
|
const now = new Date()
|
||||||
@ -549,7 +442,6 @@ describe('CreatePost', () => {
|
|||||||
CreatePost: {
|
CreatePost: {
|
||||||
postType: ['Event'],
|
postType: ['Event'],
|
||||||
eventStart: new Date(now.getFullYear(), now.getMonth() + 1).toISOString(),
|
eventStart: new Date(now.getFullYear(), now.getMonth() + 1).toISOString(),
|
||||||
eventIsOnline: false,
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
errors: undefined,
|
errors: undefined,
|
||||||
|
|||||||
@ -22,7 +22,7 @@ const locales = ['en', 'de', 'fr', 'nl', 'it', 'es', 'pt', 'pl', 'ru']
|
|||||||
|
|
||||||
const createLocation = async (session, mapboxData) => {
|
const createLocation = async (session, mapboxData) => {
|
||||||
const data = {
|
const data = {
|
||||||
id: mapboxData.id,
|
id: mapboxData.id + (mapboxData.address ? `-${mapboxData.address}` : ''),
|
||||||
nameEN: mapboxData.text_en,
|
nameEN: mapboxData.text_en,
|
||||||
nameDE: mapboxData.text_de,
|
nameDE: mapboxData.text_de,
|
||||||
nameFR: mapboxData.text_fr,
|
nameFR: mapboxData.text_fr,
|
||||||
@ -33,6 +33,7 @@ const createLocation = async (session, mapboxData) => {
|
|||||||
namePL: mapboxData.text_pl,
|
namePL: mapboxData.text_pl,
|
||||||
nameRU: mapboxData.text_ru,
|
nameRU: mapboxData.text_ru,
|
||||||
type: mapboxData.id.split('.')[0].toLowerCase(),
|
type: mapboxData.id.split('.')[0].toLowerCase(),
|
||||||
|
address: mapboxData.address,
|
||||||
lng: mapboxData.center && mapboxData.center.length ? mapboxData.center[0] : null,
|
lng: mapboxData.center && mapboxData.center.length ? mapboxData.center[0] : null,
|
||||||
lat: mapboxData.center && mapboxData.center.length ? mapboxData.center[1] : null,
|
lat: mapboxData.center && mapboxData.center.length ? mapboxData.center[1] : null,
|
||||||
}
|
}
|
||||||
@ -54,6 +55,10 @@ const createLocation = async (session, mapboxData) => {
|
|||||||
if (data.lat && data.lng) {
|
if (data.lat && data.lng) {
|
||||||
mutation += ', l.lat = $lat, l.lng = $lng'
|
mutation += ', l.lat = $lat, l.lng = $lng'
|
||||||
}
|
}
|
||||||
|
if (data.address) {
|
||||||
|
mutation += ', l.address = $address'
|
||||||
|
}
|
||||||
|
|
||||||
mutation += ' RETURN l.id'
|
mutation += ' RETURN l.id'
|
||||||
|
|
||||||
await session.writeTransaction((transaction) => {
|
await session.writeTransaction((transaction) => {
|
||||||
@ -72,7 +77,7 @@ export const createOrUpdateLocations = async (nodeLabel, nodeId, locationName, s
|
|||||||
locationName,
|
locationName,
|
||||||
)}.json?access_token=${
|
)}.json?access_token=${
|
||||||
CONFIG.MAPBOX_TOKEN
|
CONFIG.MAPBOX_TOKEN
|
||||||
}&types=region,place,country&language=${locales.join(',')}`,
|
}&types=region,place,country,address&language=${locales.join(',')}`,
|
||||||
)
|
)
|
||||||
|
|
||||||
debug(res)
|
debug(res)
|
||||||
@ -103,6 +108,10 @@ export const createOrUpdateLocations = async (nodeLabel, nodeId, locationName, s
|
|||||||
|
|
||||||
let parent = data
|
let parent = data
|
||||||
|
|
||||||
|
if (parent.address) {
|
||||||
|
parent.id += `-${parent.address}`
|
||||||
|
}
|
||||||
|
|
||||||
if (data.context) {
|
if (data.context) {
|
||||||
await asyncForEach(data.context, async (ctx) => {
|
await asyncForEach(data.context, async (ctx) => {
|
||||||
await createLocation(session, ctx)
|
await createLocation(session, ctx)
|
||||||
|
|||||||
@ -179,8 +179,6 @@ type Post {
|
|||||||
eventLocation: Location @cypher(statement: "MATCH (this)-[:IS_IN]->(l:Location) RETURN l")
|
eventLocation: Location @cypher(statement: "MATCH (this)-[:IS_IN]->(l:Location) RETURN l")
|
||||||
eventVenue: String
|
eventVenue: String
|
||||||
eventStart: String
|
eventStart: String
|
||||||
eventEnd: String
|
|
||||||
eventIsOnline: Boolean
|
|
||||||
}
|
}
|
||||||
|
|
||||||
input _PostInput {
|
input _PostInput {
|
||||||
@ -191,8 +189,6 @@ input _EventInput {
|
|||||||
eventStart: String!
|
eventStart: String!
|
||||||
eventLocation: String
|
eventLocation: String
|
||||||
eventVenue: String
|
eventVenue: String
|
||||||
eventEnd: String
|
|
||||||
eventIsOnline: Boolean
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type Mutation {
|
type Mutation {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user