Skip to content

Instantly share code, notes, and snippets.

@jipengxiang
Last active February 25, 2022 21:42
Show Gist options
  • Save jipengxiang/32dda180721ba5f624260ec35633668b to your computer and use it in GitHub Desktop.
Save jipengxiang/32dda180721ba5f624260ec35633668b to your computer and use it in GitHub Desktop.
(1) PLease upload your client side code to call talents API
(2) AWS url for web API if you have PUBLISHED your web api to AWS
or url to S3 image
(3) Sequence diagram for calling Stripe API
or calling global weather web service
@DarrylTang
Copy link

1503393 | Tang Guan You Darryl

1. TalentsController.cs

using ProductStore.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace ProductStore.Controllers
{
    public class TalentsController : ApiController
    {
        static readonly TalentRepository repository = new TalentRepository();
        [Route("api/talents")]
        public IEnumerable<Talent> GetAllTalents()
        {
            return repository.GetAll();
        }

        [Route("api/talents/{id:int}")]
        public Talent GetTalent(int id)
        {
            Talent item = repository.Get(id);
            if (item == null)
            {
                throw new HttpResponseException(HttpStatusCode.NotFound);
            }
            return item;
        }
    }
}

3.

task6-sequencediagramstripe

Some Screenshots for API annotations [Task 3]

Trying to POST object that is not compliant with annotated fields.

task2-postman-pract3-1

Attempting to POST object with fields that are not within pre-definied model.

task2-postman-pract3-2

Some screenshots regarding HTTPS authentication [Task 5]

When requesting with http://, it gets redirected to HTTPS. Below shows that an SSL protocol is needed to go through

task5-error

Using Postman, there is no response when using http

task5-postmanerror

@ThePikachu
Copy link

Database Driven Approach

public class TalentController : ApiController
{
CSC_DatabaseEntitiesv1 db = new CSC_DatabaseEntitiesv1();
///


/// Get all talents objects from database
///

///
[RequireHttps]
[HttpGet]
[EnableCors(origins: "", headers: "", methods: "*")]
[Route("api/talents")]
public IEnumerable GetAllTalents()
{
List talents = db.Talents.ToList();
System.Threading.Thread.Sleep(1500);
return talents;
}

    /// <summary>
    /// Get one talent object from database by id
    /// </summary>
    /// <param name="id">The id of the talent object</param>
    /// <returns></returns>
    [Route("api/talents/{id:int}")]
    public Talent GetTalent(int id)
    {
        Talent item = db.Talents.SingleOrDefault(x => x.Id == id);
        if (item == null)
        {
            throw new HttpResponseException(HttpStatusCode.NotFound);
        }
        return item;
    }

}

Model

image

Adding a Database Model

image
image
image
image

Reference

https://www.youtube.com/watch?v=UrHKfCCncHQ (Start from 2:03)

@S0methingSimple
Copy link

  1. AJAX Timeout Retry

$.ajax({ type: 'GET', url: url, async: false, contentType: "application/json", jsonpCallback: callback, dataType: 'jsonp', tryCount: 0, retryLimit: 3, success: function (json) { console.dir('success'); }, error: function (xhr, textStatus, errorThrown ) { if (textStatus == 'timeout') { this.tryCount++; if (this.tryCount <= this.retryLimit) { sleep(1000); $.ajax(this); return; } return; } console.log(e.message); } });

  1. Entity Framework (DotNet Core)

2.1 Startup - Specify services used
public void ConfigureServices(IServiceCollection services) { services.AddDbContext<TalentDbContext>( options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); services.AddScoped<ITalentRepository, SqlTalentRepository>(); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); }

2.2 TalentDbContext - Create DB Context

`
public class TalentDbContext : DbContext
{
public TalentDbContext(DbContextOptions options) : base(options) {}

    public DbSet<Talent> Talents { get; set; }
}

`

2.3 SqlTalentRepository - DB CRUD operations

`
public class SqlTalentRepository : ITalentRepository
{
private TalentDbContext _context;

    public SqlTalentRepository(TalentDbContext context)
    {
        _context = context;
    }

    public void Post(Talent inputTalent)
    {
        _context.Add(inputTalent);
        _context.SaveChanges();
    }

    public IEnumerable<Talent> GetAll() => _context.Talents;

    public Talent Get(int inputId) => _context.Talents.FirstOrDefault(t => t.Id == inputId);

    public void Put(int inputId, Talent inputTalent)
    {
        Talent talent = _context.Talents.FirstOrDefault(x => x.Id == inputId);
        if (talent != null)
        {
            _context.Talents.Remove(talent);
            _context.Talents.Add(inputTalent);
        }
        _context.SaveChanges();
    }
    public void Delete(int inputId)
    {
        Talent talent = _context.Talents.FirstOrDefault(x => x.Id == inputId);
        _context.Talents.Remove(talent);
        _context.SaveChanges();
    }
}

`
3. AJAX Loading

$(document).ajaxStart(function () { $("#loading").show(); }).ajaxStop(function () { $("#loading").hide(); });

@WeeA5A3
Copy link

WeeA5A3 commented Jan 18, 2019

  1. Incorrect data type creating products:
    picture1

  2. Sequence Diagram Stripe:
    sequence_stripe

@Timelessly
Copy link

Lim Wen Hui 1646348

public class TalentsController : ApiController
{
static readonly TalentRepository repository = new TalentRepository();
[EnableCors(origins: "", headers: "", methods: "*")]
// download Microsoft.AspNet.Cors package library
[Route("api/talents")]
public IEnumerable GetAllTalents()
{
return repository.GetAll();
}

    [Route("api/talents/{id:int}")]
    public Talent GetTalent(int id)
    {
        Talent item = repository.Get(id);
        if (item == null)
        {
            throw new HttpResponseException(HttpStatusCode.NotFound);
        }
        return item;
    }
}
  1. https://s3-ap-southeast-1.amazonaws.com/cscassignment/talent

web payment stripe

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment