async Task <OneOf <Success, Banned> > IPostService.AddThread(Guid postId, Guid threadId, Guid boardId, string subject, TripCodedName name, string comment, bool isSage, IIpHash ipAddress, Option <File> file, CancellationToken cancellationToken) { if (await this.bannedIpRepository.IsBanned(ipAddress, cancellationToken)) { return(new Banned()); } var thread = new Thread(threadId, boardId, subject); await threadRepository.Add(thread).ConfigureAwait(false); var post = new Domain.Post(postId, threadId, DateTime.UtcNow, name.Val, comment, isSage, ipAddress.Val); await this.postRepository.Add(post).ConfigureAwait(false); await file.MapToTask(some => this.fileRepository.Add(some)); return(new Success()); }
async Task <OneOf <Success, Banned, ImageCountExceeded, PostCountExceeded> > IPostService.Add(Guid postId, Guid threadId, TripCodedName name, string comment, bool isSage, IIpHash ipAddress, Option <File> file, CancellationToken cancellationToken) { if (await this.bannedIpRepository.IsBanned(ipAddress, cancellationToken)) { return(new Banned()); } if (ImageLimit <= await this.fileRepository.GetImageCount(threadId, cancellationToken)) { return(new ImageCountExceeded()); } if (PostLimit <= await this.postRepository.GetThreadPostCount(threadId, cancellationToken)) { return(new PostCountExceeded()); } var post = new Domain.Post(postId, threadId, DateTime.UtcNow, name.Val, comment, isSage, ipAddress.Val); await this.postRepository.Add(post).ConfigureAwait(false); await file.MapToTask(some => this.fileRepository.Add(some)); return(new Success()); }