Skip to content

Commit ccc4046

Browse files
author
James Simone
committed
Trimmed down SObjectRepository and re-tooled TaskRepository while adding to the flexibility of what the repo can do. Also fleshed out many of the tests, though some of the values are customized
1 parent 6cb2362 commit ccc4046

File tree

5 files changed

+188
-102
lines changed

5 files changed

+188
-102
lines changed

src/classes/ISObjectRepository.cls

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
public interface ISObjectRepository {
2-
32
// SOQL
4-
SObject getRecord(Id recordId);
5-
List<SObject> getList(List<Id> recordIdList);
3+
SObject getById(Id recordId);
4+
List<SObject> getById(List<Id> recordIdList);
5+
List<SObject> getByFieldAndTypeForGivenTimePeriod(Schema.SObjectField field, String operator, Object value);
66
// SOSL
77
List<SObject> searchInAllFields(String searchTerm);
8-
98
}

src/classes/SOQLUtils.cls

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public without sharing class SOQLUtils {
99
public static String toSOQLString(Object value) {
1010
if(value == null) return null;
1111
else if(value instanceof DateLiterals) {
12-
DateLiterals dateLiteral = (DateLiterals) value;
12+
DateLiterals dateLiteral = (DateLiterals)value;
1313
return dateLiteral.value;
1414
}
1515
else if(value instanceof Boolean) return String.valueOf((Boolean)value);

src/classes/SObjectRepository.cls

Lines changed: 14 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -35,72 +35,20 @@ public abstract class SObjectRepository implements ISObjectRepository {
3535
this.addFieldSetMembers();
3636
}
3737

38-
protected SObjectRepository whereIdEquals(Id recordId) {
39-
return this.whereFieldEquals(sobjectTypeFieldMap.get('Id'), SOQLUtils.toSOQLString(recordId));
38+
protected SObjectRepository whereFieldOperatorEqualsValue(Schema.SObjectField field, String operator, Object value) {
39+
return this.addCondition(field, operator, SOQLUtils.toSOQLString(value));
4040
}
4141

42-
protected SObjectRepository whereIdIn(Set<Id> recordIdSet) {
43-
return this.whereFieldIn(sobjectTypeFieldMap.get('Id'), new List<Id>(recordIdSet));
44-
}
45-
46-
protected SObjectRepository whereIdIn(List<Id> recordList) {
47-
return this.whereFieldIn(sobjectTypeFieldMap.get('Id'), recordList);
48-
}
49-
50-
protected SObjectRepository whereFieldEquals(Schema.SObjectField field, Object value) {
51-
return this.addCondition(field, '=', SOQLUtils.toSOQLString(value));
52-
}
53-
54-
protected SObjectRepository whereFieldDoesNotEqual(Schema.SObjectField field, Object value) {
55-
return this.addCondition(field, '!=', SOQLUtils.toSOQLString(value));
56-
}
57-
58-
protected SObjectRepository whereFieldGreaterThan(Schema.SObjectField field, Object value) {
59-
return this.addCondition(field, '>', SOQLUtils.toSOQLString(value));
60-
}
61-
62-
protected SObjectRepository whereFieldGreaterThanOrEqualTo(Schema.SObjectField field, Object value) {
63-
return this.addCondition(field, '>=', SOQLUtils.toSOQLString(value));
64-
}
65-
66-
protected SObjectRepository whereFieldLessThan(Schema.SObjectField field, Object value) {
67-
return this.addCondition(field, '<', SOQLUtils.toSOQLString(value));
68-
}
69-
70-
protected SObjectRepository whereFieldLessThanOrEqualTo(Schema.SObjectField field, Object value) {
71-
return this.addCondition(field, '<=', SOQLUtils.toSOQLString(value));
72-
}
73-
74-
protected SObjectRepository whereFieldIn(Schema.SObjectField field, List<Object> valueList) {
75-
return this.addCondition(field, 'IN', SOQLUtils.toSOQLString(valueList));
76-
}
77-
78-
protected SObjectRepository whereFieldNotIn(Schema.SObjectField field, List<Object> valueList) {
79-
return this.addCondition(field, 'NOT IN', SOQLUtils.toSOQLString(valueList));
80-
}
81-
82-
protected SObjectRepository whereFieldIncludes(Schema.SObjectField field, List<Object> valueList) {
83-
return this.addCondition(field, 'INCLUDES', SOQLUtils.toSOQLString(valueList));
84-
}
85-
86-
protected SObjectRepository whereFieldExcludes(Schema.SObjectField field, List<Object> valueList) {
87-
return this.addCondition(field, 'EXCLUDES', SOQLUtils.toSOQLString(valueList));
88-
}
89-
90-
protected SObjectRepository whereFieldLike(Schema.SObjectField field, String comparisonValue) {
91-
return this.addCondition(field, 'LIKE', comparisonValue);
92-
}
93-
94-
protected SObjectRepository whereFieldNotLike(Schema.SObjectField field, String comparisonValue) {
95-
return this.addCondition(field, 'NOT LIKE', comparisonValue);
42+
protected SObjectRepository whereFieldOperatorEqualsListValues(Schema.SObjectField field, String operator, List<Object> values) {
43+
return this.addCondition(field, operator, SOQLUtils.toSOQLString(values));
9644
}
9745

9846
protected SObjectRepository orderBy(Schema.SObjectField orderByField) {
9947
return this.orderBy(orderByField, null, null);
10048
}
10149

10250
protected SObjectRepository orderBy(Schema.SObjectField orderByField, SObjectRepository.SortOrder sortOrder) {
103-
return orderBy(orderByField, sortOrder, null);
51+
return this.orderBy(orderByField, sortOrder, null);
10452
}
10553

10654
protected SObjectRepository orderBy(Schema.SObjectField orderByField, SObjectRepository.SortOrder sortOrder, SObjectRepository.NullsSortOrder nullsSortOrder) {
@@ -137,6 +85,14 @@ public abstract class SObjectRepository implements ISObjectRepository {
13785
return Search.query(this.getSearchQuery(searchTerm, searchGroup))[0];
13886
}
13987

88+
89+
//CRUD
90+
protected void doInsert(SObject record) {doInsert(new List<SObject>{record});}
91+
protected void doInsert(List<SObject> records) {Database.insert(records);}
92+
protected void doUpsert(List<SObject> records) {Database.upsert(records);}
93+
protected void doUpdate(List<SObject> records) {Database.update(records);}
94+
protected void doDelete(List<SObject> records) {Database.delete(records);}
95+
14096
private void addCommonQueryFields() {
14197
if(!this.addCommonQueryFields) return;
14298

@@ -159,7 +115,7 @@ public abstract class SObjectRepository implements ISObjectRepository {
159115
}
160116

161117
private SObjectRepository addCondition(Schema.SObjectField field, String operator, String value) {
162-
this.whereClauseList.add('(' + field + ' ' + operator.trim() + ' ' + value + ')');
118+
this.whereClauseList.add(field + ' ' + operator.trim() + ' ' + value);
163119
return this;
164120
}
165121

src/classes/TaskRepository.cls

Lines changed: 39 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -6,66 +6,77 @@ public without sharing class TaskRepository extends SObjectRepository {
66
super(TaskRepository.DEFAULT_FIELD_SET);
77
}
88

9-
public TaskRepository(Boolean returnCommonFields) {
10-
super(TaskRepository.DEFAULT_FIELD_SET,returnCommonFields);
11-
}
12-
13-
public Task getRecord(Id taskId) {
9+
//SOQL
10+
public Task getById(Id taskId) {
1411
return (Task)this
15-
.whereIdEquals(taskId)
12+
.whereFieldOperatorEqualsValue(Schema.Task.Id, '=', taskId)
1613
.setAsUpdate()
1714
.getFirstQueryResult();
1815
}
1916

20-
public List<Task> getList(List<Id> taskIdList) {
17+
public List<Task> getById(List<Id> taskIdList) {
2118
return (List<Task>)this
22-
.whereIdIn(taskIdList)
19+
.whereFieldOperatorEqualsListValues(Schema.Task.Id, 'IN', taskIdList)
2320
.setAsUpdate()
2421
.getQueryResults();
2522
}
2623

27-
public List<Task> getListOfOpenForWhoId(Id whoId) {
28-
return getListOfOpenForWhoId(new List<Id>{whoId});
24+
public List<Task> getByWhoId(List<Id> taskWhoIdList) {
25+
return (List<Task>)this
26+
.whereFieldOperatorEqualsListValues(Schema.Task.WhoId, 'IN', taskWhoIdList)
27+
.orderBy(Schema.Task.WhoId)
28+
.orderBy(Schema.Task.CreatedDate,SObjectRepository.SortOrder.DESCENDING)
29+
.getQueryResults();
2930
}
3031

31-
public List<Task> getListOfCreatedSinceLastWeek() {
32+
public List<Task> getByWhatId(List<Id> taskWhatIdList) {
3233
return (List<Task>)this
33-
.whereFieldGreaterThanOrEqualTo(Schema.Lead.CreatedDate, new DateLiterals().LAST_WEEK)
34+
.whereFieldOperatorEqualsListValues(Schema.Task.WhatId,'IN', taskWhatIdList)
35+
.orderBy(Schema.Task.CreatedDate,SObjectRepository.SortOrder.DESCENDING)
3436
.getQueryResults();
3537
}
3638

37-
public List<Task> getListOfOpenForWhoId(List<Id> whoIdList) {
39+
public List<Task> getOpenTasksByWhoId(Id whoId) {
40+
return getOpenTasksByWhoId(new List<Id>{whoId});
41+
}
42+
43+
public List<Task> getOpenTasksByWhoId(List<Id> whoIdList) {
3844
return (List<Task>)this
39-
.whereWhoIdIn(whoIdList)
40-
.whereIsClosed(false)
45+
.whereFieldOperatorEqualsListValues(Schema.Task.WhoId, 'IN', whoIdList)
46+
.whereFieldOperatorEqualsValue(Schema.Task.IsClosed, '=', false)
4147
.orderBy(Schema.Task.WhoId)
4248
.orderBy(Schema.Task.CreatedDate, SObjectRepository.SortOrder.DESCENDING)
4349
.getQueryResults();
4450
}
4551

46-
public List<Task> getListByFieldForWhoIds(Schema.SObjectField field, String value, List<Id> whoIdList) {
52+
public List<Task> getByFieldForWhoIds(Schema.SObjectField field, String value, List<Id> whoIdList) {
4753
return (List<Task>)this
48-
.whereWhoIdIn(whoIdList)
49-
.whereFieldEquals(field,value)
54+
.whereFieldOperatorEqualsListValues(Schema.Task.WhoId, 'IN', whoIdList)
55+
.whereFieldOperatorEqualsValue(field, '=', value)
5056
.orderBy(Schema.Task.WhoId)
5157
.orderBy(Schema.Task.CreatedDate, SObjectRepository.SortOrder.DESCENDING)
5258
.getQueryResults();
5359
}
5460

55-
public List<Task> searchInAllFields(String searchTerm) {
61+
public List<Task> getCreatedSinceTimeValue(Object timeValue) {
5662
return (List<Task>)this
57-
.whereIsClosed(false)
58-
.orderBy(Schema.Task.WhoId)
59-
.limitCount(10)
60-
.getSearchResults(searchTerm, SObjectRepository.SearchGroup.ALL_FIELDS);
63+
.whereFieldOperatorEqualsValue(Schema.Lead.CreatedDate, '>=', timeValue)
64+
.getQueryResults();
6165
}
6266

63-
private TaskRepository whereIsClosed(Boolean bool) {
64-
return (TaskRepository)this.whereFieldEquals(Schema.Task.IsClosed, bool);
67+
public List<Task> getByFieldAndTypeForGivenTimePeriod(Schema.SObjectField field, String operator, Object value) {
68+
return(List<Task>)this
69+
.whereFieldOperatorEqualsValue(field, '=', operator)
70+
.whereFieldOperatorEqualsValue(Schema.Task.CreatedDate, '>=', value)
71+
.getQueryResults();
6572
}
6673

67-
private TaskRepository whereWhoIdIn(List<Id> whoIdList) {
68-
return (TaskRepository)this.whereFieldIn(Schema.Task.WhoId, whoIdList);
74+
//SOSL
75+
public List<Task> searchInAllFields(String searchTerm) {
76+
return (List<Task>)this
77+
.whereFieldOperatorEqualsValue(Schema.Task.IsClosed, '=', false)
78+
.orderBy(Schema.Task.WhoId)
79+
.limitCount(10)
80+
.getSearchResults(searchTerm, SObjectRepository.SearchGroup.ALL_FIELDS);
6981
}
70-
7182
}

0 commit comments

Comments
 (0)