Esempio n. 1
0
 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)));
 }
Esempio n. 2
0
 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))));
         }
     }
 }
Esempio n. 3
0
        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));
        }
Esempio n. 4
0
 public override int GetHashCode()
 {
     return(UrlKey.GetHashCode());
 }
Esempio n. 5
0
 public UrlEntry(UrlKey key, string url)
 {
     this.Key = key;
     this.Url = url;
 }