Skip to content

Commit

Permalink
add image.rating
Browse files Browse the repository at this point in the history
  • Loading branch information
pacoccino committed Mar 2, 2022
1 parent 09ddc6a commit d29b260
Show file tree
Hide file tree
Showing 7 changed files with 78 additions and 10 deletions.
2 changes: 2 additions & 0 deletions api/db/migrations/20220302123435_image_rating/migration.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
-- AlterTable
ALTER TABLE "Image" ADD COLUMN "rating" INTEGER NOT NULL DEFAULT 0;
1 change: 1 addition & 0 deletions api/db/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ model Image {
id String @id @default(uuid())
path String @unique
dateTaken DateTime @default(now())
rating Int @default(0)
metadata Json @default("{}")
tagsOnImages TagsOnImage[]
}
Expand Down
14 changes: 14 additions & 0 deletions api/src/graphql/images.sdl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ export const schema = gql`
id: String!
path: String!
dateTaken: DateTime!
rating: Int!
metadata: JSONObject!
tagsOnImages: [TagsOnImage]!
}
Expand Down Expand Up @@ -44,13 +45,26 @@ export const schema = gql`
tagLists: [FilterByTagList!]
dateRange: DateRange
path: String
rating: FilterByRating
}
input FilterByTagList {
tagGroupId: String!
tagIds: [String]!
condition: TagListCondition!
}
enum IntCondition {
equals
lte
gte
}
input FilterByRating {
value: Int!
condition: IntCondition
}
input DeleteManyImagesInput {
imageIds: [String!]
filter: ImageFilters
Expand Down
1 change: 1 addition & 0 deletions api/src/services/aplu/aplu.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ export const arbo = async ({
const allImages = await images(
{
filter,
take: 0,
},
{
select: {
Expand Down
5 changes: 5 additions & 0 deletions api/src/services/images/images.scenarios.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ export const standard = defineScenario({
data: {
path: 'p1.jpg',
dateTaken: '2022-01-01T00:01:00Z',
rating: 1,
tagsOnImages: {
create: [
{
Expand All @@ -71,6 +72,7 @@ export const standard = defineScenario({
data: {
path: 'ath1/p2.jpg',
dateTaken: '2022-01-01T00:02:00Z',
rating: 2,
tagsOnImages: {
create: [
{
Expand All @@ -86,6 +88,7 @@ export const standard = defineScenario({
p3: (scenario) => ({
data: {
path: 'ath1/ath2/p3.jpg',
rating: 3,
dateTaken: '2022-01-01T00:03:00Z',
tagsOnImages: {
create: [
Expand All @@ -102,6 +105,7 @@ export const standard = defineScenario({
p4: (scenario) => ({
data: {
path: 'ath3/p4.jpg',
rating: 4,
dateTaken: '2022-01-01T00:04:00Z',
tagsOnImages: {
create: [
Expand All @@ -117,6 +121,7 @@ export const standard = defineScenario({
}),
p5: (scenario) => ({
data: {
rating: 5,
path: 'p5.jpg',
dateTaken: '2022-01-01T00:05:00Z',
tagsOnImages: {
Expand Down
49 changes: 48 additions & 1 deletion api/src/services/images/images.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ describe('images', () => {
expect(result[1]).toEqual(scenario.image.p4)
})

describe(' filter date range', () => {
describe('filter date range', () => {
scenario('date range from to', async (scenario: StandardScenario) => {
const result = await images({
sorting: {
Expand Down Expand Up @@ -262,6 +262,53 @@ describe('images', () => {
expect(result).toContainEqual(scenario.image.p3)
})
})

describe('filter rating', () => {
scenario('less than', async (scenario: StandardScenario) => {
const result = await images({
filter: {
rating: {
value: 2,
condition: 'lte',
},
},
})

expect(result.length).toEqual(3)
expect(result).toContainEqual(scenario.image.p1)
expect(result).toContainEqual(scenario.image.p2)
expect(result).toContainEqual(scenario.image.notag)
})
scenario('greater than', async (scenario: StandardScenario) => {
const result = await images({
filter: {
rating: {
value: 2,
condition: 'gte',
},
},
})

expect(result.length).toEqual(4)
expect(result).toContainEqual(scenario.image.p2)
expect(result).toContainEqual(scenario.image.p3)
expect(result).toContainEqual(scenario.image.p4)
expect(result).toContainEqual(scenario.image.p5)
})
scenario('equals', async (scenario: StandardScenario) => {
const result = await images({
filter: {
rating: {
value: 2,
condition: 'equals',
},
},
})

expect(result.length).toEqual(1)
expect(result).toContainEqual(scenario.image.p2)
})
})
})

scenario('images = moreImages', async () => {
Expand Down
16 changes: 7 additions & 9 deletions api/src/services/images/images.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,7 @@ export const images = (
{ filter, take, skip, sorting, cursor }: QueryimagesArgs,
opts: ImagesOpts = {}
): Promise<PImage[]> => {
const query: Prisma.ImageFindManyArgs = {
orderBy: new Array<Prisma.ImageOrderByWithRelationInput>(),
}
const query: Prisma.ImageFindManyArgs = {}

if (take === undefined) {
query.take = 10
Expand All @@ -57,12 +55,7 @@ export const images = (
}
}

query.orderBy.push({
dateTaken: sorting?.dateTaken || 'desc',
})
query.orderBy.push({
id: 'desc',
})
query.orderBy = [{ dateTaken: sorting?.dateTaken || 'desc' }, { id: 'desc' }]

if (filter) {
query.where = {}
Expand Down Expand Up @@ -99,6 +92,11 @@ export const images = (
contains: filter.path,
}
}
if (filter.rating) {
query.where.rating = {
[filter.rating.condition]: filter.rating.value,
}
}
}

return db.image.findMany(query)
Expand Down

0 comments on commit d29b260

Please sign in to comment.