Skip to content

Instantly share code, notes, and snippets.

View tminussi's full-sized avatar

Thales Minussi tminussi

View GitHub Profile
# iam_role
resource "aws_iam_role" "iam_role" {
name = "iam-role"
assume_role_policy = templatefile("${path.module}/templates/lambda-base-policy.tpl", {})
}
#content of lambda-base-policy.tpl
{
"Version": "2012-10-17",
server:
port: 8765
spring:
application.name: morannon
eureka:
client:
registerWithEureka: true
fetchRegistry: true
curl -X POST http://localhost:8080/messages -H "content-type:application/json" -d '{"text": "hello, world!", "room": "developers"}'
db.createCollection("messages", { capped: true, size: 5000000, max: 10000 });
@Repository
interface MessageRepository : ReactiveMongoRepository<Message, String> {
@Tailable
fun findWithTailableCursorByRoom(room: String): Flux<Message>
}
@Service
class MessageService(val messageRepository: MessageRepository) {
fun findWithTailableCursorByRoom(room: String): Flux<MessageView> {
return this.messageRepository.findWithTailableCursorByRoom(room)
.map { it -> MessageView(it.text, "anonymous", LocalDateTime.now()) }
}
fun newMessage(messageBody: MessageBody) {
this.messageRepository.save(Message(null, messageBody.text, messageBody.room)).subscribe()
@RestController
@RequestMapping("/messages")
class MessageController(val messageService: MessageService) {
@GetMapping(produces = [(MediaType.TEXT_EVENT_STREAM_VALUE)])
fun allMessages(@RequestParam room: String): Flux<MessageView> {
return this.messageService.findWithTailableCursorByRoom(room)
}
@PostMapping