Passed
Pull Request — master (#75)
by Mathieu
01:36
created

server/src/Infrastructure/FairCalendar/Repository/EventRepository.ts   A

Complexity

Total Complexity 5
Complexity/F 1

Size

Lines of Code 71
Function Count 5

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 5
eloc 60
mnd 0
bc 0
fnc 5
dl 0
loc 71
bpm 0
cpm 1
noi 0
c 0
b 0
f 0
rs 10

5 Functions

Rating   Name   Duplication   Size   Complexity  
A EventRepository.save 0 3 1
A EventRepository.findMonthlyEvents 0 23 1
A EventRepository.getDayTimeSpentByUser 0 13 1
A EventRepository.findOneById 0 7 1
A EventRepository.delete 0 3 1
1
import {Injectable} from '@nestjs/common';
2
import {InjectRepository} from '@nestjs/typeorm';
3
import {Repository} from 'typeorm';
4
import {IEventRepository} from 'src/Domain/FairCalendar/Repository/IEventRepository';
5
import {Event} from 'src/Domain/FairCalendar/Event.entity';
6
import {User} from 'src/Domain/User/User.entity';
7
8
@Injectable()
9
export class EventRepository implements IEventRepository {
10
  constructor(
11
    @InjectRepository(Event)
12
    private readonly repository: Repository<Event>
13
  ) {}
14
15
  public save(event: Event): Promise<Event> {
16
    return this.repository.save(event);
17
  }
18
19
  public delete(event: Event): void {
20
    this.repository.delete(event);
21
  }
22
23
  public async getDayTimeSpentByUser(
24
    user: User,
25
    date: string
26
  ): Promise<number> {
27
    const result = await this.repository
28
      .createQueryBuilder('event')
29
      .select('SUM(event.time) as time')
30
      .where('event.date = :date', {date})
31
      .andWhere('event.user = :user', {user: user.getId()})
32
      .getRawOne();
33
34
    return Number(result.time) || 0;
35
  }
36
37
  public findOneById(id: string): Promise<Event> {
38
    return this.repository
39
      .createQueryBuilder('event')
40
      .select(['event.id', 'user.id'])
41
      .where('event.id = :id', {id})
42
      .innerJoin('event.user', 'user')
43
      .getOne();
44
  }
45
46
  public findMonthlyEvents(date: string, userId: string): Promise<Event[]> {
47
    const month = new Date(date).getMonth() + 1;
48
    const year = new Date(date).getFullYear();
49
50
    return this.repository
51
      .createQueryBuilder('event')
52
      .select([
53
        'event.id',
54
        'event.time',
55
        'event.summary',
56
        'event.date',
57
        'event.type',
58
        'project.title',
59
        'task.title'
60
      ])
61
      .where('user.id = :userId', {userId})
62
      .andWhere('extract(month FROM event.date) = :month', {month})
63
      .andWhere('extract(year FROM event.date) = :year', {year})
64
      .innerJoin('event.user', 'user')
65
      .leftJoin('event.project', 'project')
66
      .leftJoin('event.task', 'task')
67
      .orderBy('event.date', 'ASC')
68
      .getMany();
69
  }
70
}
71