示例#1
0
        public async Task <ActionResult> AddPassageAsync(int groupId, [FromBody] PassageReference passage)
        {
            if (passage.Chapter < 1 || passage.Verse < 1 || passage.Length < 1 || passage.StartOffset < 0 || passage.EndOffset < 0)
            {
                return(BadRequest());
            }

            var currentUserId = HttpContext.GetCurrentUserId();

            if (currentUserId is null)
            {
                return(Unauthorized());
            }

            var role = await UserService.GetUserRoleAsync(currentUserId, groupId);

            if (role is null)
            {
                return(NotFound());
            }
            else if (role > Roles.Admin)
            {
                return(Forbid());
            }

            return(await GroupService.AddPassageAsync(groupId, passage)
                ? (ActionResult)Ok()
                : Conflict());
        }
示例#2
0
        public async Task <bool> AddPassageAsync(int groupId, PassageReference passageReference)
        {
            if (passageReference is null)
            {
                throw new ArgumentNullException(nameof(passageReference));
            }

            Logger.LogInformation("Adding passage {PassageReference} to group {GroupId}", passageReference, groupId);

            var group = await DbContext.Groups.FindAsync(groupId);

            if (group is null)
            {
                Logger.LogWarning("Could not add passage reference {PassageReference} to group {GroupId} because the group does not exist", passageReference, groupId);
                return(false);
            }

            await DbContext.Entry(group).Collection(g => g.PassageReferences).LoadAsync();

            if (group.PassageReferences.Any(p => passageReference == p))
            {
                Logger.LogInformation("Could not add passage reference {PassageReference} to group {GroupId} because the group already contains that reference", passageReference, groupId);
                return(false);
            }

            // Create a new reference since a specific passage reference instance should only belong to a single group.
            // This guards against a passage from another group being passed in and added.
            group.PassageReferences.Add(new PassageReference(passageReference));
            DbContext.Groups.Update(group);
            await DbContext.SaveChangesAsync();

            Logger.LogInformation("Added passage {PassageReference} to group {GroupId}", passageReference, groupId);
            return(true);
        }
示例#3
0
        public async Task <ActionResult <Passage> > GetPassageAsync(Books book, byte chapter, byte verse, [FromQuery] byte length = 1, [FromQuery] Translations translation = Translations.KJV)
        {
            if (chapter == 0 || verse == 0 || length == 0)
            {
                return(BadRequest());
            }

            var passageRef = new PassageReference(book, chapter, verse, length, 0, 0);
            var verses     = await VerseService.GetVersesAsync(passageRef.Verses, translation);

            return(Ok(verses));
        }
示例#4
0
        private async Task <Passage> GetPassageAsync(PassageReference reference, Translations translation)
        {
            var referenceString = reference?.ToString();

            if (reference == null || string.IsNullOrEmpty(referenceString))
            {
                Logger.LogError("Could not resolve passage references. Invalid reference {@PassageReference}", reference);
                throw new ArgumentException("Invalid passage reference", nameof(reference));
            }

            var passageVerses = await VerseService.GetVersesAsync(reference.Verses, translation);

            Logger.LogInformation("Retrieved {VerseCount} verses for {PassageReference}", passageVerses.Count(), reference);

            var text = string.Join(' ', passageVerses.Select(v => v.Text));

            if (reference.StartOffset > 0 || reference.EndOffset > 0)
            {
                var tokens = text.Split();
                text = string.Join(' ', tokens, reference.StartOffset, tokens.Length - (reference.StartOffset + reference.EndOffset));
            }

            return(new Passage(reference.Id, referenceString, text, translation.ToString()));
        }