Skip to content

Commit

Permalink
feat: Return item curation when updating/publishing
Browse files Browse the repository at this point in the history
  • Loading branch information
juanmahidalgo committed Mar 7, 2022
1 parent d4d397e commit 4994e57
Show file tree
Hide file tree
Showing 7 changed files with 39 additions and 18 deletions.
14 changes: 12 additions & 2 deletions src/Collection/Collection.router.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import { MAX_FORUM_ITEMS } from '../Item/utils'
import { UnpublishedItemError } from '../Item/Item.errors'
import { FullItem, Item } from '../Item'
import { isCommitteeMember } from '../Committee'
import { ItemCurationAttributes } from '../Curation/ItemCuration/ItemCuration.types'
import { buildCollectionForumPost, createPost } from '../Forum'
import { sendDataToWarehouse } from '../warehouse'
import { Collection } from './Collection.model'
Expand Down Expand Up @@ -245,13 +246,21 @@ export class CollectionRouter extends Router {

publishCollection = async (
req: AuthRequest
): Promise<{ collection: FullCollection; items: FullItem[] }> => {
): Promise<{
collection: FullCollection
items: FullItem[]
itemCurations?: ItemCurationAttributes[]
}> => {
const id = server.extractFromReq(req, 'id')

try {
const dbCollection = await this.service.getDBCollection(id)

let result: { collection: CollectionAttributes; items: FullItem[] }
let result: {
collection: CollectionAttributes
items: FullItem[]
itemCurations?: ItemCurationAttributes[]
}

if (isTPCollection(dbCollection)) {
const itemIds = server.extractFromReq<string[]>(req, 'itemIds')
Expand Down Expand Up @@ -282,6 +291,7 @@ export class CollectionRouter extends Router {
return {
collection: toFullCollection(result.collection),
items: result.items,
itemCurations: result.itemCurations,
}
} catch (error) {
if (error instanceof InvalidRequestError) {
Expand Down
2 changes: 2 additions & 0 deletions src/Collection/Collection.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ export class CollectionService {
): Promise<{
collection: CollectionAttributes
items: FullItem[]
itemCurations: ItemCurationAttributes[]
}> {
// For DCL collections, once a published collection item changes, the PUSH CHANGES button appears
// That will fire a /collections/${collectionId}/curation which will create a new CollectionCuration
Expand Down Expand Up @@ -230,6 +231,7 @@ export class CollectionService {
return {
collection: Bridge.mergeTPCollection(dbCollection, lastItemCuration),
items: await Bridge.consolidateTPItems(dbItems, itemCurations),
itemCurations,
}
}

Expand Down
12 changes: 3 additions & 9 deletions src/Curation/Curation.router.ts
Original file line number Diff line number Diff line change
Expand Up @@ -341,13 +341,9 @@ export class CurationRouter extends Router {
)
}

return curationService.getModel().update(
{
...curation,
status: curationJSON.status,
updated_at: this.getISODate(),
},
{ id: curation.id }
return await curationService.updateStatusAndReturnById(
curation.id,
curationJSON.status
)
}

Expand Down Expand Up @@ -389,8 +385,6 @@ export class CurationRouter extends Router {
return curationService.getModel().create(attributes)
}

private getISODate = () => new Date().toISOString()

private validateAccessToCuration = async (
service: CurationService<any>,
id: string,
Expand Down
11 changes: 10 additions & 1 deletion src/Curation/Curation.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { getMergedCollection } from '../Collection/utils'
import { hasAccess as hasItemAccess } from '../Item/access'
import { getMergedItem } from '../Item/utils'
import { CollectionCuration } from './CollectionCuration'
import { CurationType } from './Curation.types'
import { CurationStatus, CurationType } from './Curation.types'
import { ItemCuration } from './ItemCuration'

// TODO: This class SHOULD NOT make database queries. It's useful but it breakes the convention we have where only model know about queries
Expand Down Expand Up @@ -69,6 +69,15 @@ export class CurationService<
return result[0]
}

async updateStatusAndReturnById(id: string, status: CurationStatus) {
const result = await this.getModel().query(SQL`
UPDATE ${raw(this.getTableName())}
SET status = ${status}, updated_at = now()
WHERE id = ${id}
RETURNING *`)
return result[0]
}

async hasAccess(id: string, ethAddress: string) {
switch (this.type) {
case CurationType.COLLECTION: {
Expand Down
6 changes: 5 additions & 1 deletion src/Curation/Curation.types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,11 @@ export const patchCurationSchema = Object.freeze({
properties: {
status: {
type: 'string',
enum: [CurationStatus.APPROVED, CurationStatus.REJECTED],
enum: [
CurationStatus.PENDING,
CurationStatus.APPROVED,
CurationStatus.REJECTED,
],
},
},
additionalProperties: false,
Expand Down
10 changes: 6 additions & 4 deletions src/Item/Item.model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,12 @@ export class Item extends Model<ItemAttributes> {

static findByThirdPartyIds(thirdPartyIds: string[]) {
return this.query<ItemAttributes>(SQL`
SELECT *
FROM ${raw(this.tableName)} i
JOIN ${raw(Collection.tableName)} c ON c.id = i.collection_id
WHERE c.third_party_id = ANY(${thirdPartyIds})`)
SELECT item.*
FROM ${raw(this.tableName)} item
JOIN ${raw(
Collection.tableName
)} collection ON collection.id = item.collection_id
WHERE collection.third_party_id = ANY(${thirdPartyIds})`)
}

static findOrderedByCollectionId(
Expand Down
2 changes: 1 addition & 1 deletion src/Item/Item.router.ts
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ export class ItemRouter extends Router {
}

const [dbItems, remoteItems, dbTPItems, itemCurations] = await Promise.all([
Item.find<ItemAttributes>({ eth_address }),
Item.find<ItemAttributes>({ eth_address, urn_suffix: null }),
collectionAPI.fetchItemsByAuthorizedUser(eth_address),
this.itemService.getTPItemsByManager(eth_address),
ItemCuration.find<ItemCurationAttributes>(),
Expand Down

0 comments on commit 4994e57

Please sign in to comment.