예제 #1
0
        public int LinkToReporter(string messageId, ReporterModel reporterModel)
        {
            return(_connection.Execute($@"
MERGE INTO [core_rel_messages_reporters] as t
USING (
    VALUES (@MessageId, @ReporterId, @CreatedAt)
)
AS s([MessageId], [ReporterId], [CreatedAt])
ON s.[MessageId] = t.[MessageId] AND s.[ReporterId] = t.[ReporterId]
WHEN NOT MATCHED THEN
	INSERT (
        [MessageId],
        [ReporterId],
        [CreatedAt]
    )
    VALUES(
        s.MessageId,
        s.ReporterId,
        s.CreatedAt
    );
",
                                       param: new
            {
                MessageId = messageId,
                ReporterId = reporterModel.Id,
                CreatedAt = DateTime.Now.ToUnixTimestamp()
            },
                                       transaction: _transaction));
        }
예제 #2
0
        public IEnumerable <MessageModel> GetUnqueuedMessages(ReporterModel reporter, MessageType messageType, int limit, int offset)
        {
            return(_connection.Query <MessageModel>($@"
SELECT m.* 
FROM [core_messages] m
LEFT JOIN [core_rel_messages_reporters] r ON r.MessageId = m.Id AND r.ReporterId = @ReporterId
WHERE ([MessageType] & @MessageType) > 0 
    AND ([Status] & @Status) = 0
    AND r.Id IS NULL
ORDER BY [CreatedAt] ASC
OFFSET @Offset ROWS
FETCH NEXT @Limit ROWS ONLY;
",
                                                    param: new
            {
                Limit = limit,
                Offset = offset,
                MessageType = messageType,
                Status = MessageStatus.Delievered,
                ReporterId = reporter.Id
            },
                                                    transaction: _transaction));
        }
예제 #3
0
 public IReporter SetReportModel(ReporterModel model)
 {
     ReporterModel = model;
     return(this);
 }