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

EventRepository.save   A

Complexity

Conditions 1

Size

Total Lines 3
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 3
dl 0
loc 3
c 0
b 0
f 0
rs 10
cc 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.getId());
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([
41
        'event.id',
42
        'event.time',
43
        'event.summary',
44
        'event.date',
45
        'event.type',
46
        'user.id',
47
        'project.id',
48
        'project.name',
49
        'task.id',
50
        'task.name'
51
      ])
52
      .where('event.id = :id', {id})
53
      .innerJoin('event.user', 'user')
54
      .leftJoin('event.project', 'project')
55
      .leftJoin('event.task', 'task')
56
      .getOne();
57
  }
58
59
  public findMonthlyEvents(date: string, userId: string): Promise<Event[]> {
60
    const month = new Date(date).getMonth() + 1;
61
    const year = new Date(date).getFullYear();
62
63
    return this.repository
64
      .createQueryBuilder('event')
65
      .select([
66
        'event.id',
67
        'event.time',
68
        'event.summary',
69
        'event.date',
70
        'event.type',
71
        'project.id',
72
        'project.name',
73
        'task.id',
74
        'task.name'
75
      ])
76
      .where('user.id = :userId', {userId})
77
      .andWhere('extract(month FROM event.date) = :month', {month})
78
      .andWhere('extract(year FROM event.date) = :year', {year})
79
      .innerJoin('event.user', 'user')
80
      .leftJoin('event.project', 'project')
81
      .leftJoin('event.task', 'task')
82
      .orderBy('event.date', 'ASC')
83
      .getMany();
84
  }
85
86
  public findMonthlyOverview(date: string, userId: string): Promise<Event[]> {
87
    const month = new Date(date).getMonth() + 1;
88
    const year = new Date(date).getFullYear();
89
90
    return this.repository
91
      .createQueryBuilder('event')
92
      .select(['event.time', 'event.date', 'event.type'])
93
      .where('user.id = :userId', {userId})
94
      .andWhere('extract(month FROM event.date) = :month', {month})
95
      .andWhere('extract(year FROM event.date) = :year', {year})
96
      .innerJoin('event.user', 'user')
97
      .orderBy('event.date', 'ASC')
98
      .getMany();
99
  }
100
}
101