Esempio n. 1
0
        public IEnumerable<SearchResultViewModel> GetTopicsWithSearchTerm(string searchTerm)
        {
            string upperInvariantSearchTerm = searchTerm.ToUpperInvariant();

            using (var todoModelContext = new TodoModelContext())
            {
                var topics = todoModelContext.Topics;

                foreach (var topic in topics)
                {
                    foreach (var note in topic.Notes)
                    {
                        if (note.Content.ToUpperInvariant().Contains(upperInvariantSearchTerm))
                        {
                            yield return new SearchResultViewModel
                            {
                                Content = note.Content,
                                TopicName = topic.Name,
                                TopicId = topic.TopicId,
                            };
                        }
                    }
                }
            }
        }
        public TopicNotesModule()
            : base("/api/topics/{topicId:int}/notes")
        {
            this.RequiresAuthentication();

            Post["/"] = parameters =>
            {
                var topicId = (int)parameters.topicId.Value;
                var note = this.Bind<Note>();

                using (var todoModelContext = new TodoModelContext())
                {
                    DomainClasses.Topic topic = todoModelContext.Topics.Find(topicId);

                    topic.Notes.Add(note);
                    todoModelContext.Notes.Add(note);

                    todoModelContext.SaveChanges();

                    return HttpStatusCode.Created;
                }
            };

            Post["/move/{noteId:int}"] = parameters =>
            {
                var topicId = (int)parameters.topicId.Value;
                var noteId = (int)parameters.noteId.Value;

                using (var todoModelContext = new TodoModelContext())
                {
                    Note note = todoModelContext.Notes.Find(noteId);
                    note.Topic.Notes.Remove(note);
                    DomainClasses.Topic newTopic = todoModelContext.Topics.Find(topicId);
                    newTopic.Notes.Add(note);

                    todoModelContext.SaveChanges();

                    return HttpStatusCode.OK;
                }
            };

            Delete["/{noteId:int}"] = parameters =>
            {
                var topicId = (int)parameters.topicId.Value;
                var noteId = (int)parameters.noteId.Value;

                using (var todoModelContext = new TodoModelContext())
                {
                    DomainClasses.Topic topic = todoModelContext.Topics.Find(topicId);
                    Note note = todoModelContext.Notes.Find(noteId);
                    topic.Notes.Remove(note);
                    todoModelContext.Notes.Remove(note);

                    todoModelContext.SaveChanges();

                    return HttpStatusCode.NoContent;
                }
            };
        }
Esempio n. 3
0
        public TopicsModule()
            : base("/api/topics")
        {
            this.RequiresAuthentication();

            Get["/"] = _ =>
            {
                using (var todoModelContext = new TodoModelContext())
                {
                    var topics = todoModelContext.Topics.ToList().Select(t => new SlimTopic(t));
                    return Response.AsJson(topics);
                }
            };

            Get["/{id:int}"] = parameters =>
            {
                using (var todoModelContext = new TodoModelContext())
                {
                    var id = (int)parameters.id.Value;

                    var topic = todoModelContext.Topics.SingleOrDefault(d => d.TopicId == id);

                    Topic fromDomainModel = mapper.Map<Topic>(topic);

                    return Response.AsJson(fromDomainModel);
                }
            };

            Post["/"] = _ =>
            {
                using (var todoModelContext = new TodoModelContext())
                {
                    var slimTopic = this.Bind<SlimTopic>();

                    var topic = new DomainClasses.Topic
                    {
                        Name = slimTopic.Name,
                        IsShown = true,
                    };

                    todoModelContext.Topics.Add(topic);
                    todoModelContext.SaveChanges();

                    return Response.AsJson(new { id = topic.TopicId });
                }
            };

            Post["/{id:int}"] = parameters =>
            {
                using (var todoModelContext = new TodoModelContext())
                {
                    var id = (int)parameters.id.Value;

                    DomainClasses.Topic topic = todoModelContext.Topics.Find(id);

                    this.BindTo(topic,
                        ReflectionHelper.GetPropertyName<DomainClasses.Topic>(p => p.Notes),
                        ReflectionHelper.GetPropertyName<DomainClasses.Topic>(p => p.TopicId));

                    todoModelContext.SaveChanges();

                    return HttpStatusCode.OK;
                }
            };

            Delete["/{id:int}"] = parameters =>
            {
                using (var todoModelContext = new TodoModelContext())
                {
                    var id = (int)parameters.id.Value;

                    DomainClasses.Topic topic = todoModelContext.Topics.Find(id);
                    todoModelContext.Topics.Remove(topic);
                    todoModelContext.SaveChanges();

                    return HttpStatusCode.NoContent;
                }
            };
        }