Add missing files. Add API for client apps.
[wsti_pai.git] / Projects / Controllers / api / ActivityController.cs
1 using Newtonsoft.Json;
2 using Projects.Models;
3 using System;
4 using System.Collections.Generic;
5 using System.IO;
6 using System.Linq;
7 using System.Net;
8 using System.Net.Http;
9 using System.Net.Http.Headers;
10 using System.Threading.Tasks;
11 using System.Web.Http;
12
13 namespace Projects.Controllers.api
14 {
15     [AllowCrossSiteJson]
16     public class ActivityController : ApiController
17     {
18         private ProjectsDBEntities db = new ProjectsDBEntities();
19
20         // GET: api/Activity
21         public HttpResponseMessage GetActivity()
22         {
23             var results = (from pt in db.ProjectTasks
24                            join ts in db.TaskStatuses on pt.task_status_id equals ts.id
25                            where ts.status == "Done"
26                            group pt.User by pt.User.id into g
27                            join u in db.Users on g.Key equals u.id
28                            select new ActivityResult { user = u.login, count = g.Count() })
29                            .ToList();
30             return new HttpResponseMessage() {
31                 Content = new JsonContent(results)
32             };
33             
34         }
35     }
36     public class JsonContent : HttpContent
37     {
38
39         private readonly MemoryStream _Stream = new MemoryStream();
40         public JsonContent(object value)
41         {
42
43             Headers.ContentType = new MediaTypeHeaderValue("application/json");
44             var jw = new JsonTextWriter(new StreamWriter(_Stream));
45             jw.Formatting = Formatting.Indented;
46             var serializer = new JsonSerializer();
47             serializer.Serialize(jw, value);
48             jw.Flush();
49             _Stream.Position = 0;
50
51         }
52         protected override Task SerializeToStreamAsync(Stream stream, TransportContext context)
53         {
54             return _Stream.CopyToAsync(stream);
55         }
56
57         protected override bool TryComputeLength(out long length)
58         {
59             length = _Stream.Length;
60             return true;
61         }
62     }
63 }