Skip to content

Commit 9c2ccc9

Browse files
committed
Upgrade MovieRest to v4.0.11
1 parent 46abf22 commit 9c2ccc9

31 files changed

+13137
-310
lines changed
Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,22 @@
1-
using ServiceStack.MovieRest.App_Start;
21

32
namespace ServiceStack.MovieRest.App_Start
43
{
54
using Funq;
6-
using ServiceStack.Common.Utils;
7-
using ServiceStack.OrmLite;
8-
using ServiceStack.OrmLite.Sqlite;
9-
using ServiceStack.ServiceInterface.Cors;
10-
using ServiceStack.Text;
11-
using ServiceStack.WebHost.Endpoints;
12-
13-
public class AppHost
5+
using OrmLite;
6+
using Text;
7+
using Data;
8+
9+
public class AppHost
1410
: AppHostBase
1511
{
1612
/// <summary>
1713
/// Initializes a new instance of your ServiceStack application, with the specified name and assembly containing the services.
1814
/// </summary>
19-
public AppHost() : base("ServiceStack REST at the Movies!", typeof (MovieService).Assembly)
20-
{
21-
}
15+
public AppHost() : base("ServiceStack REST at the Movies!", typeof (MovieService).Assembly) {}
2216

2317
public override void Configure(Container container)
2418
{
25-
JsConfig.DateHandler = JsonDateHandler.ISO8601;
19+
JsConfig.DateHandler = DateHandler.ISO8601;
2620

2721
//Set JSON web services to return idiomatic JSON camelCase properties
2822
JsConfig.EmitCamelCaseNames = true;
@@ -37,10 +31,9 @@ public override void Configure(Container container)
3731

3832
Plugins.Add(new CorsFeature()); //Enable CORS
3933

40-
SetConfig(new EndpointHostConfig
41-
{
42-
DebugMode = true //Show StackTraces for easier debugging (default auto inferred by Debug/Release builds)
43-
});
34+
SetConfig(new HostConfig {
35+
DebugMode = true //Show StackTraces for easier debugging (default auto inferred by Debug/Release builds)
36+
});
4437
}
4538
}
4639
}
Lines changed: 164 additions & 174 deletions
Original file line numberDiff line numberDiff line change
@@ -1,177 +1,167 @@
1+
using System.Runtime.Serialization;
2+
13
namespace ServiceStack.MovieRest
24
{
3-
using System;
4-
using System.Collections.Generic;
5-
using System.Net;
6-
using ServiceStack.Common;
7-
using ServiceStack.Common.Web;
8-
using ServiceStack.DataAnnotations;
9-
using ServiceStack.OrmLite;
10-
using ServiceStack.ServiceHost;
11-
using ServiceStack.ServiceInterface;
12-
using ServiceStack.Text;
13-
14-
/// <summary>
15-
/// Define your ServiceStack web service request (i.e. Request DTO).
16-
/// </summary>
17-
/// <remarks>The route is defined here rather than in the AppHost.</remarks>
18-
[Api("GET or DELETE a single movie by Id. Use POST to create a new Movie and PUT to update it")]
19-
[Route("/movies", "POST,PUT,PATCH,DELETE")]
20-
[Route("/movies/{Id}")]
21-
public class Movie : IReturn<MovieResponse>
22-
{
23-
/// <summary>
24-
/// Initializes a new instance of the movie.
25-
/// </summary>
26-
public Movie()
27-
{
28-
this.Genres = new List<string>();
29-
}
30-
31-
/// <summary>
32-
/// Gets or sets the id of the movie. The id will be automatically incremented when added.
33-
/// </summary>
34-
[AutoIncrement]
35-
public int Id { get; set; }
36-
37-
public string ImdbId { get; set; }
38-
public string Title { get; set; }
39-
public decimal Rating { get; set; }
40-
public string Director { get; set; }
41-
public DateTime ReleaseDate { get; set; }
42-
public string TagLine { get; set; }
43-
public List<string> Genres { get; set; }
44-
}
45-
46-
/// <summary>
47-
/// Define your ServiceStack web service response (i.e. Response DTO).
48-
/// </summary>
49-
public class MovieResponse
50-
{
51-
/// <summary>
52-
/// Gets or sets the movie.
53-
/// </summary>
54-
public Movie Movie { get; set; }
55-
}
56-
57-
/// <summary>
58-
/// Create your ServiceStack restful web service implementation.
59-
/// </summary>
60-
public class MovieService : Service
61-
{
62-
/// <summary>
63-
/// GET /movies/{Id}
64-
/// </summary>
65-
public MovieResponse Get(Movie movie)
66-
{
67-
return new MovieResponse
68-
{
69-
Movie = Db.Id<Movie>(movie.Id),
70-
};
71-
}
72-
73-
/// <summary>
74-
/// POST /movies
75-
/// returns HTTP Response =>
76-
/// 201 Created
77-
/// Location: http://localhost/ServiceStack.MovieRest/movies/{newMovieId}
78-
/// {newMovie DTO in [xml|json|jsv|etc]}
79-
/// </summary>
80-
public object Post(Movie movie)
81-
{
82-
Db.Insert(movie);
83-
var newMovieId = Db.GetLastInsertId();
84-
85-
var newMovie = new MovieResponse
86-
{
87-
Movie = Db.Id<Movie>(newMovieId),
88-
};
89-
90-
return new HttpResult(newMovie)
91-
{
92-
StatusCode = HttpStatusCode.Created,
93-
Headers =
94-
{
95-
{HttpHeaders.Location, base.Request.AbsoluteUri.CombineWith(newMovieId.ToString())}
96-
}
97-
};
98-
}
99-
100-
/// <summary>
101-
/// PUT /movies/{id}
102-
/// </summary>
103-
public object Put(Movie movie)
104-
{
105-
Db.Update(movie);
106-
107-
return new HttpResult
108-
{
109-
StatusCode = HttpStatusCode.NoContent,
110-
Headers =
111-
{
112-
{HttpHeaders.Location, this.RequestContext.AbsoluteUri.CombineWith(movie.Id.ToString())}
113-
}
114-
};
115-
}
116-
117-
/// <summary>
118-
/// DELETE /movies/{Id}
119-
/// </summary>
120-
public object Delete(Movie request)
121-
{
122-
Db.DeleteById<Movie>(request.Id);
123-
124-
return new HttpResult
125-
{
126-
StatusCode = HttpStatusCode.NoContent,
127-
Headers =
128-
{
129-
{HttpHeaders.Location, this.RequestContext.AbsoluteUri.CombineWith(request.Id.ToString())}
130-
}
131-
};
132-
}
133-
}
134-
135-
/// <summary>
136-
/// Define your ServiceStack web service request (i.e. Request DTO).
137-
/// </summary>
138-
/// <remarks>The route is defined here rather than in the AppHost.</remarks>
139-
[Api("Find movies by genre, or all movies if no genre is provided")]
140-
[Route("/movies", "GET, OPTIONS")]
141-
[Route("/movies/genres/{Genre}")]
142-
public class Movies
143-
{
144-
public string Genre { get; set; }
145-
}
146-
147-
/// <summary>
148-
/// Define your ServiceStack web service response (i.e. Response DTO).
149-
/// </summary>
150-
public class MoviesResponse
151-
{
152-
/// <summary>
153-
/// Gets or sets the list of movies.
154-
/// </summary>
155-
public List<Movie> Movies { get; set; }
156-
}
157-
158-
/// <summary>
159-
/// Create your ServiceStack RESTful web service implementation.
160-
/// </summary>
161-
public class MoviesService : Service
162-
{
163-
/// <summary>
164-
/// GET /movies
165-
/// GET /movies/genres/{Genre}
166-
/// </summary>
167-
public object Get(Movies request)
168-
{
169-
return new MoviesResponse
170-
{
171-
Movies = request.Genre.IsNullOrEmpty()
172-
? Db.Select<Movie>()
173-
: Db.Select<Movie>("Genres LIKE {0}", "%{0}%".Fmt(request.Genre))
174-
};
175-
}
176-
}
5+
using System;
6+
using System.Collections.Generic;
7+
using System.Net;
8+
using DataAnnotations;
9+
using OrmLite;
10+
11+
/// <summary>
12+
/// Define your ServiceStack web service request (i.e. Request DTO).
13+
/// </summary>
14+
/// <remarks>The route is defined here rather than in the AppHost.</remarks>
15+
[Api("GET or DELETE a single movie by Id. Use POST to create a new Movie and PUT to update it")]
16+
[Route("/movies", "POST,PUT,PATCH,DELETE")]
17+
[Route("/movies/{Id}")]
18+
public class Movie : IReturn<MovieResponse>
19+
{
20+
/// <summary>
21+
/// Initializes a new instance of the movie.
22+
/// </summary>
23+
public Movie()
24+
{
25+
this.Genres = new List<string>();
26+
}
27+
28+
/// <summary>
29+
/// Gets or sets the id of the movie. The id will be automatically incremented when added.
30+
/// </summary>
31+
[AutoIncrement]
32+
public int Id { get; set; }
33+
34+
public string ImdbId { get; set; }
35+
public string Title { get; set; }
36+
public decimal Rating { get; set; }
37+
public string Director { get; set; }
38+
public DateTime ReleaseDate { get; set; }
39+
public string TagLine { get; set; }
40+
public List<string> Genres { get; set; }
41+
}
42+
43+
/// <summary>
44+
/// Define your ServiceStack web service response (i.e. Response DTO).
45+
/// </summary>
46+
public class MovieResponse
47+
{
48+
/// <summary>
49+
/// Gets or sets the movie.
50+
/// </summary>
51+
public Movie Movie { get; set; }
52+
}
53+
54+
/// <summary>
55+
/// Define your ServiceStack web service request (i.e. Request DTO).
56+
/// </summary>
57+
/// <remarks>The route is defined here rather than in the AppHost.</remarks>
58+
[Api("Find movies by genre, or all movies if no genre is provided")]
59+
[Route("/movies", "GET, OPTIONS")]
60+
[Route("/movies/genres/{Genre}")]
61+
public class Movies : IReturn<MoviesResponse>
62+
{
63+
public string Genre { get; set; }
64+
}
65+
66+
/// <summary>
67+
/// Define your ServiceStack web service response (i.e. Response DTO).
68+
/// </summary>
69+
[DataContract]
70+
public class MoviesResponse
71+
{
72+
/// <summary>
73+
/// Gets or sets the list of movies.
74+
/// </summary>
75+
[DataMember]
76+
public List<Movie> Movies { get; set; }
77+
}
78+
79+
/// <summary>
80+
/// Create your ServiceStack restful web service implementation.
81+
/// </summary>
82+
public class MovieService : Service
83+
{
84+
/// <summary>
85+
/// GET /movies
86+
/// GET /movies/genres/{Genre}
87+
/// </summary>
88+
public object Get(Movies request)
89+
{
90+
return new MoviesResponse {
91+
Movies = request.Genre.IsNullOrEmpty()
92+
? Db.Select<Movie>()
93+
: Db.Select<Movie>("Genres LIKE {0}", "%{0}%".Fmt(request.Genre))
94+
};
95+
}
96+
97+
/// <summary>
98+
/// GET /movies/{Id}
99+
/// </summary>
100+
public MovieResponse Get(Movie movie)
101+
{
102+
return new MovieResponse
103+
{
104+
Movie = Db.SingleById<Movie>(movie.Id),
105+
};
106+
}
107+
108+
/// <summary>
109+
/// POST /movies
110+
/// returns HTTP Response =>
111+
/// 201 Created
112+
/// Location: http://localhost/ServiceStack.MovieRest/movies/{newMovieId}
113+
/// {newMovie DTO in [xml|json|jsv|etc]}
114+
/// </summary>
115+
public object Post(Movie movie)
116+
{
117+
Db.Save(movie);
118+
var newMovieId = movie.Id;
119+
120+
var newMovie = new MovieResponse
121+
{
122+
Movie = Db.SingleById<Movie>(newMovieId),
123+
};
124+
125+
return new HttpResult(newMovie)
126+
{
127+
StatusCode = HttpStatusCode.Created,
128+
Headers = {
129+
{HttpHeaders.Location, base.Request.AbsoluteUri.CombineWith(newMovieId.ToString())}
130+
}
131+
};
132+
}
133+
134+
/// <summary>
135+
/// PUT /movies/{id}
136+
/// </summary>
137+
public object Put(Movie movie)
138+
{
139+
Db.Update(movie);
140+
141+
return new HttpResult
142+
{
143+
StatusCode = HttpStatusCode.NoContent,
144+
Headers =
145+
{
146+
{HttpHeaders.Location, this.Request.AbsoluteUri.CombineWith(movie.Id.ToString())}
147+
}
148+
};
149+
}
150+
151+
/// <summary>
152+
/// DELETE /movies/{Id}
153+
/// </summary>
154+
public object Delete(Movie request)
155+
{
156+
Db.DeleteById<Movie>(request.Id);
157+
158+
return new HttpResult
159+
{
160+
StatusCode = HttpStatusCode.NoContent,
161+
Headers = {
162+
{HttpHeaders.Location, this.Request.AbsoluteUri.CombineWith(request.Id.ToString())}
163+
}
164+
};
165+
}
166+
}
177167
}

0 commit comments

Comments
 (0)