-
Notifications
You must be signed in to change notification settings - Fork 1
12 People Types
JP Barbosa edited this page Apr 15, 2023
·
2 revisions
code ./packages/shared/src/types/People.ts
import { Integer, Node, Relationship } from 'neo4j-driver';
import { Movie } from './Movie';
export type PersonMovie = Movie & {
relationship: string;
};
export type Person = {
id?: number;
name: string;
born?: number;
movies?: PersonMovie[];
};
export type ActedIn = {
roles: string[];
};
export type Actor = Person & ActedIn;
export type Director = Person;
export type Producer = Person;
export type Writer = Person;
export type Reviewer = Person;
export type PersonNode = Node<Integer, Person>;
export type ActedInRelationship = Relationship<Integer, ActedIn>;
export type PeopleQueryResult = {
person: Person;
};
code ./packages/shared/src/types/Movie.ts
...
import { Actor, Director, Producer, Reviewer, Writer } from './People';
export type MoviePerson = Actor | Director | Producer | Reviewer | Writer;
export type Movie = {
...
people: {
actors: Actor[];
directors: Director[];
producers: Producer[];
writers: Writer[];
reviewers: Reviewer[];
};
};
...
code ./packages/shared/src/types/relationships.ts
export type RelationshipKey =
| 'ACTED_IN'
| 'DIRECTED'
| 'PRODUCED'
| 'WROTE'
| 'REVIEWED';
export type RelationshipCollection =
| 'actors'
| 'directors'
| 'producers'
| 'writers'
| 'reviewers';
export type Relationship = {
key: RelationshipKey;
collection: RelationshipCollection;
};
export const relationships: Relationship[] = [
{
key: 'ACTED_IN',
collection: 'actors',
},
{
key: 'DIRECTED',
collection: 'directors',
},
{
key: 'PRODUCED',
collection: 'producers',
},
{
key: 'WROTE',
collection: 'writers',
},
{
key: 'REVIEWED',
collection: 'reviewers',
},
];
export const relationshipKeys: RelationshipKey[] = relationships.map(
(relationship) => relationship.key
);
export const relationshipCollections: RelationshipCollection[] =
relationships.map((relationship) => relationship.collection);
code ./packages/shared/src/types/index.ts
...
export * from './People';
export * from './relationships';
code ./packages/shared/src/sampleData/people.ts
import { Person } from '../types';
export const people: Person[] = [
{
id: 1,
name: 'Keanu Reeves',
born: 1964,
},
];
code ./packages/shared/src/sampleData/index.ts
...
export * from './people';
code ./packages/shared/src/sampleData/movies.ts
import { Movie } from '../types/Movie';
export const movies: Movie[] = [
{
id: 1,
title: 'The Shawshank Redemption',
released: 1994,
tagline: 'Fear can hold you prisoner. Hope can set you free.',
people: {
actors: [
{
name: 'Tim Robbins',
born: 1958,
roles: ['Andy Dufresne'],
},
{
name: 'Morgan Freeman',
born: 1937,
roles: ['Ellis Boyd "Red" Redding'],
},
],
directors: [],
producers: [],
writers: [],
reviewers: [],
},
},
{
id: 2,
title: 'The Godfather',
released: 1972,
tagline: "An offer you can't refuse.",
people: {
actors: [
{
name: 'Marlon Brando',
born: 1924,
roles: ['Don Vito Corleone'],
},
{
name: 'Al Pacino',
born: 1940,
roles: ['Michael Corleone'],
},
],
directors: [],
producers: [],
writers: [],
reviewers: [],
},
},
];
code ./packages/shared/src/utils/stringToTitleCase.ts
export const stringToTitleCase = (txt: string) => {
return txt.replace(/_/g, ' ').replace(/\w\S*/g, (txt: string) => {
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
});
};
code ./packages/shared/src/index.ts
export * from './utils/stringToTitleCase';
git add .
git commit -m "People Types"