forked from ardalis/Result
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathWeatherService.cs
More file actions
126 lines (114 loc) · 4.17 KB
/
WeatherService.cs
File metadata and controls
126 lines (114 loc) · 4.17 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
116
117
118
119
120
121
122
123
124
125
126
using Ardalis.Result.Sample.Core.DTOs;
using Ardalis.Result.Sample.Core.Model;
using Microsoft.Extensions.Localization;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Ardalis.Result.Sample.Core.Services
{
public class WeatherService
{
public WeatherService(IStringLocalizer<WeatherService> stringLocalizer)
{
_stringLocalizer = stringLocalizer;
}
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private IStringLocalizer<WeatherService> _stringLocalizer;
public Task<Result<IEnumerable<WeatherForecast>>> GetForecastAsync(ForecastRequestDto model)
{
return Task.FromResult(GetForecast(model));
}
public Result<IEnumerable<WeatherForecast>> GetForecast(ForecastRequestDto model)
{
switch (model.PostalCode)
{
case "NotFound":
return Result.NotFound();
case "Conflict":
return Result.Conflict();
}
// validate model
if (model.PostalCode.Length > 10)
{
return Result.Invalid(new List<ValidationError> {
new ValidationError
{
Identifier = nameof(model.PostalCode),
ErrorMessage = _stringLocalizer["PostalCode cannot exceed 10 characters."].Value }
});
}
if (string.IsNullOrWhiteSpace(model.PostalCode))
{
return Result.Invalid(new List<ValidationError> {
new ValidationError
{
Identifier = nameof(model.PostalCode),
ErrorMessage = "PostalCode is required" }
});
}
// test value
if (model.PostalCode == "55555")
{
return Result.Success(Enumerable.Range(1, 1)
.Select(index =>
new WeatherForecast
{
Date = DateTime.Now,
TemperatureC = 0,
Summary = Summaries[0]
}));
}
var rng = new Random();
return Result.Success<IEnumerable<WeatherForecast>>(Enumerable.Range(1, 5)
.Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = rng.Next(-20, 55),
Summary = Summaries[rng.Next(Summaries.Length)]
})
.ToArray());
}
public Result<WeatherForecast> GetSingleForecast(ForecastRequestDto model)
{
switch (model.PostalCode)
{
case "NotFound":
return Result.NotFound();
case "Conflict":
return Result.Conflict();
}
// validate model
if (model.PostalCode.Length > 10)
{
return Result.Invalid(new List<ValidationError> {
new ValidationError
{
Identifier = nameof(model.PostalCode),
ErrorMessage = _stringLocalizer["PostalCode cannot exceed 10 characters."].Value }
});
}
// test value
if (model.PostalCode == "55555")
{
return Result.Success(
new WeatherForecast
{
Date = DateTime.Now,
TemperatureC = 0,
Summary = Summaries[0]
});
}
var rng = new Random();
return Result.Success(new WeatherForecast
{
Date = DateTime.Now.AddDays(rng.Next(1, 5)),
TemperatureC = rng.Next(-20, 55),
Summary = Summaries[rng.Next(Summaries.Length)]
});
}
}
}