// table storage stuff
        public static async Task <Post> InsertPost(PostSubmitDTO postDTO)
        {
            long   now       = Tools.ConvertToEpoch(DateTime.UtcNow);
            long   countdown = Tools.GetCountdownFromDateTime(now);
            string id        = countdown.ToString() + Guid.NewGuid().ToString();

            Post post = new Post(id, postDTO.track_id)
            {
                body         = postDTO.body,
                url          = postDTO.url,
                summary      = postDTO.summary,
                date_created = now,
                track_name   = postDTO.track_name,
                tags         = string.Join(",", postDTO.tags),
                title        = postDTO.title,
                type         = postDTO.type,
                has_image    = false
            };


            // TODO: process image
            if (Tools.ValidateUri(postDTO.image_url))
            {
                post.has_image = await ProcessImage(id, postDTO.image_url);
            }

            var result = await TableStorageRepository.InsertPost(post);

            if (result == null)
            {
                return(null);
            }

            // shit hack to remove body for queue processing
            post.body = null;

            // add to queues for further processing
            TableStorageRepository.AddMessageToQueue("process-new-post-increment-track-tags", JsonConvert.SerializeObject(post));
            TableStorageRepository.AddMessageToQueue("process-new-post-add-to-cosmos", JsonConvert.SerializeObject(post));

            // check rate limit
            Random rnd = new Random();

            if (rnd.Next(1, 8) == 3)
            {
                TableStorageRepository.AddMessageToQueue("process-new-post-check-rate-limit", post.PartitionKey);
            }

            return(post);
        }
Beispiel #2
0
        public static async Task <bool> DeleteTrack(string trackId)
        {
            // decrement the count
            var track = await GetTrack(trackId);

            ExtendedUserRepository.DecrementTrackCount(track.PartitionKey, track.is_private);

            // send messages to queue
            TableStorageRepository.AddMessageToQueue("delete-posts-from-track", trackId);
            TableStorageRepository.AddMessageToQueue("delete-tracktags-from-track", trackId);

            // then delete track cosmos
            CosmosRepository <Track> .DeleteItemAsync(trackId);

            // then delete profile pics
            DeleteImages(trackId);

            // then delete from table storage, and return
            return(await TableStorageRepository.DeleteTrack(trackId));
        }