This repository was archived by the owner on Nov 10, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 58
Expand file tree
/
Copy pathAttachmentRepository.cs
More file actions
115 lines (70 loc) · 2.88 KB
/
AttachmentRepository.cs
File metadata and controls
115 lines (70 loc) · 2.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
using System.IO;
using System.Linq;
using XeroApi.Integration;
using XeroApi.Model;
namespace XeroApi
{
public class AttachmentRepository
{
private readonly IIntegrationProxy _integrationProxy;
/// <summary>
/// Initializes a new instance of the <see cref="AttachmentRepository"/> class.
/// </summary>
/// <param name="integrationProxy">The integration proxy.</param>
internal AttachmentRepository(IIntegrationProxy integrationProxy)
{
_integrationProxy = integrationProxy;
}
// POST
public Attachment UpdateOrCreate<TModel>(TModel model, FileInfo fileInfo)
where TModel : ModelBase, IAttachmentParent
{
return UpdateOrCreate(model, new Attachment(fileInfo));
}
public Attachment UpdateOrCreate<TModel>(TModel model, Attachment attachment)
where TModel : ModelBase, IAttachmentParent
{
string xml = _integrationProxy.UpdateOrCreateAttachment(
typeof(TModel).Name,
ModelTypeHelper.GetModelItemId(model),
attachment);
Response response = ModelSerializer.DeserializeTo<Response>(xml);
return response.Attachments.First();
}
// PUT
public Attachment Create<TModel>(TModel model, FileInfo fileInfo)
where TModel : ModelBase, IAttachmentParent
{
return Create(model, new Attachment(fileInfo));
}
public Attachment Create<TModel>(TModel model, Attachment attachment)
where TModel : ModelBase, IAttachmentParent
{
string xml = _integrationProxy.CreateAttachment(
typeof(TModel).Name,
ModelTypeHelper.GetModelItemId(model),
attachment);
return ModelSerializer.DeserializeTo<Response>(xml).Attachments.First();
}
// GET (one)
public Attachment GetAttachmentFor<TModel>(TModel model)
where TModel : ModelBase, IAttachmentParent
{
// List the attachments against this model.
var modelItemId = ModelTypeHelper.GetModelItemId(model);
var allAttachmentsXml = _integrationProxy.FindAttachments(typeof(TModel).Name, modelItemId);
var allAttachments = ModelSerializer.DeserializeTo<Response>(allAttachmentsXml).Attachments;
if (allAttachments == null || allAttachments.Count == 0)
{
return null;
}
var theFirstAttachment = allAttachments.First();
// Get the attachment content
var content = _integrationProxy.FindOneAttachment(
typeof(TModel).Name,
modelItemId,
theFirstAttachment.FileName);
return theFirstAttachment.WithContent(content);
}
}
}