1 package net.sumaris.core.dao.administration.user;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 import net.sumaris.core.dao.cache.CacheNames;
26 import net.sumaris.core.dao.technical.SortDirection;
27 import net.sumaris.core.model.administration.user.Person;
28 import net.sumaris.core.vo.administration.user.PersonVO;
29 import net.sumaris.core.vo.data.ImageAttachmentVO;
30 import net.sumaris.core.vo.filter.PersonFilterVO;
31 import org.springframework.cache.annotation.CacheEvict;
32 import org.springframework.cache.annotation.CachePut;
33 import org.springframework.cache.annotation.Cacheable;
34 import org.springframework.cache.annotation.Caching;
35
36 import java.util.List;
37
38 public interface PersonDao {
39
40 interface Listener {
41 void onSave(PersonVO personVO);
42 void onDelete(int id);
43 }
44
45 List<PersonVO> findByFilter(PersonFilterVO filter, int offset, int size, String sortAttribute, SortDirection sortDirection);
46
47 Long countByFilter(PersonFilterVO filter);
48
49 @Cacheable(cacheNames = CacheNames.PERSON_BY_ID, key = "#id", unless="#result==null")
50 PersonVO get(int id);
51
52 @Cacheable(cacheNames = CacheNames.PERSON_BY_PUBKEY, key = "#pubkey", unless="#result==null")
53 PersonVO getByPubkeyOrNull(String pubkey);
54
55 List<String> getEmailsByProfiles(List<Integer> userProfiles, List<Integer> statusIds);
56
57 ImageAttachmentVO getAvatarByPubkey(String pubkey);
58
59 boolean isExistsByEmailHash(String hash);
60
61 @Caching(evict = {
62 @CacheEvict(cacheNames = CacheNames.PERSON_BY_ID, key = "#id"),
63 @CacheEvict(cacheNames = CacheNames.PERSON_BY_PUBKEY, allEntries = true)
64 })
65 void delete(int id);
66
67 @Caching(put = {
68 @CachePut(cacheNames= CacheNames.PERSON_BY_ID, key="#source.id", condition = "#source != null && #source.id != null"),
69 @CachePut(cacheNames= CacheNames.PERSON_BY_PUBKEY, key="#source.pubkey", condition = "#source != null && #source.id != null && #source.pubkey != null")
70 })
71 PersonVOf="../../../../../../net/sumaris/core/vo/administration/user/PersonVO.html#PersonVO">PersonVO save(PersonVO source);
72
73 PersonVO toPersonVO(Person source);
74
75 void addListener(Listener listener);
76 }