public static Result <UrlEntry> CreateFromUrl(int keyLength, string url) { return(url .ToResult(() => "URL cannot be null or empty") .Then(v => UrlKey.Create(keyLength)) .Then(key => new UrlEntry(key, url))); }
public Result <UrlEntry> GetUrl(UrlKey key) { using (var cn = Open(ConnectionString)) { using (var cmd = CreateProc(cn, "GetUrl")) { cmd.Parameters.AddWithValue("@urlKey", key.Value); return(CreateResult(cmd, dr => new UrlEntry(key, dr.GetString(1)))); } } }
public static async Task <HttpResponseMessage> AddUrl([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "Bindings/UrlManager/Add")] HttpRequestMessage req, [Table("urls", "1", "KEY", Take = 1)] UrlKey keyTable, [Table("urls")] CloudTable outTable, TraceWriter log) { log.Info("UrlManagerAddUrlFunction - Started"); // parse query parameter var url = req.GetQueryNameValuePairs().FirstOrDefault(q => string.Compare(q.Key, "url", StringComparison.OrdinalIgnoreCase) == 0).Value; if (string.IsNullOrEmpty(url)) { return(req.CreateResponse(HttpStatusCode.BadRequest, "Please provide an URL as parameter within the request")); } if (keyTable == null) { keyTable = new UrlKey { PartitionKey = "1", RowKey = "KEY", Id = 1024 }; var addKey = TableOperation.Insert(keyTable); await outTable.ExecuteAsync(addKey); } var idx = keyTable.Id; const string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var s = string.Empty; while (idx > 0) { s += alphabet[idx % alphabet.Length]; idx /= alphabet.Length; } var code = string.Join(string.Empty, s.Reverse()); log.Info($"UrlManagerAddUrlFunction - Code: {code}"); var urlData = new UrlData { PartitionKey = $"{code[0]}", RowKey = code, Url = url }; keyTable.Id += 10; var operation = TableOperation.Replace(keyTable); await outTable.ExecuteAsync(operation); operation = TableOperation.Insert(urlData); await outTable.ExecuteAsync(operation); return(req.CreateResponse(HttpStatusCode.OK, urlData.RowKey)); }
public override int GetHashCode() { return(UrlKey.GetHashCode()); }
public UrlEntry(UrlKey key, string url) { this.Key = key; this.Url = url; }