A$unik

From EIK wiki

Meeskonna liikmed

  • Hardi Antsov
  • Juhan Trink

Rakenduse info

Lähtekoodi leiab: https://github.com/hantsov/asunik

Rakendus jookseb ka Azure's. Rakendus läheb Azure's "sleep mode", kui seda ei kasutata mõnd aega. Seega esimene laadimine võib võtta ca 15 sekundit.

Klientrakendus:
http://asunikng.azurewebsites.net

Teenus:
http://apiasunik.azurewebsites.net/api


Logi

  • 17.03 - Meeskonna Wiki lehe loomine, esialgne arutelu teema kohta
  • 28.05 - Valmis teenus ja rakendus, vaja täita veel aine wiki nõuded.

XML ülesanded

XML

<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="asunik_games_1.xsl" type="text/xsl"?>
<games xmlns="http://wwww.asunik.ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://wwww.asunik.ee asunik_games.xsd">
    <game>
        <name>Witcher 3</name>
        <developer>CD Projekt RED</developer>
        <publisher>CD Projekt</publisher>
        <genre>Action role-playing</genre>
        <release>2015-05-19</release>
        <platforms>
            <platform>Microsoft Windows</platform>
            <platform>PlayStation 4</platform>
            <platform>Xbox One</platform>
        </platforms>
        <reviews>
            <review type="critic">
                <author>Phill Cameron</author>
                <publisher>Telegraph</publisher>
                <score max="5">5</score>
                <summary>
                    There is no saving the world, here, no great evil force pervading the landscape, or a doomsday clock
                    ticking down to inevitable destruction, with only you to stand in its way.
                    The story of Wild Hunt is a personal one, set in a huge and unrelentingly beautiful world.
                </summary>
                <address>www.telegraph.co.uk/gaming/what-to-play/witcher-3-wild-hunt-review/</address>
            </review>
            <review type="critic">
                <author>Vince Ingenito</author>
                <publisher>IGN</publisher>
                <score max="10">9.3</score>
                <summary>
                    Though the straightforward and fetch-quest-heavy main story overstays its welcome, the option
                    of joyfully adventuring through a rich, expansive open world was always there for me when I’d start
                    to burn out. Even if the plot isn’t terribly interesting, the many characters who play a part in it
                    are, and along with the excellent combat and RPG gameplay, they elevate The Witcher 3 to a plane few
                    other RPGs inhabit.
                </summary>
                <address>www.ign.com/articles/2015/05/12/the-witcher-3-the-wild-hunt-review</address>
            </review>
            <review type="user">
                <author>Hardi Antsov</author>
                <score max="100">99</score>
                <summary>
                    Clap, clap, clap, CD Projekt Red.
                </summary>
                <address>www.123reviews.com/witcher3/reviews/100</address>
            </review>
        </reviews>
        <offers>
            <offer limitedtime="true">
                <name>Steam</name>
                <address>store.steampowered.com/app/292030/</address>
                <amount currency="EUR">17.99</amount>
            </offer>
            <offer>
                <name>GOG</name>
                <address>www.gog.com/game/the_witcher_3_wild_hunt</address>
                <amount currency="EUR">37.79</amount>
            </offer>
        </offers>
    </game>
    <game>
        <name>XCOM 2</name>
        <developer>Firaxis Games</developer>
        <publisher>2K Games</publisher>
        <genre>Turn-based tactics</genre>
        <release>2016-02-05</release>
        <platforms>
            <platform>Microsoft Windows</platform>
            <platform>Linux</platform>
            <platform>OS X</platform>
            <platform>PlayStation 4</platform>
            <platform>Xbox One</platform>
        </platforms>
        <reviews>
            <review type="critic">
                <author>Mike Mahardy</author>
                <publisher>Gamespot</publisher>
                <score max="10">9</score>
                <summary>
                    Now that XCOM 2 has made its way to consoles, these sentiments remain the same. Some technical
                    issues have migrated from this year’s PC release: characters sometimes freeze in place while the
                    turn progresses; soldiers can take almost 10 seconds to execute commands; and cutscenes have a
                    tendency to drop frame rates throughout campaigns. But the layered tactics, impactful meta-game, and
                    deep character-building are all intact on PS4 and Xbox One. XCOM 2 remains a superb strategy title.
                </summary>
                <address>www.gamespot.com/reviews/xcom-2-review/1900-6416347/</address>
            </review>
            <review type="user">
                <author>Juhan Trink</author>
                <score max="100">85</score>
                <summary>
                    Better graphics and some gameplay improvements but buggy and not optimized very well.
                </summary>
                <address>www.123reviews.com/xcom2/reviews/3</address>
            </review>
        </reviews>
        <offers>
            <offer limitedtime="true">
                <name>Humble Store</name>
                <address>www.humblebundle.com/store/xcom-2</address>
                <amount currency="EUR">49.99</amount>
            </offer>
            <offer>
                <name>Amazon</name>
                <address>www.amazon.com/XCOM-2-PC/dp/B00YHZEILQ?th=1</address>
                <amount currency="USD">24.99</amount>
            </offer>
        </offers>
    </game>
</games>

XSD

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://wwww.asunik.ee" xmlns="http://wwww.asunik.ee">

    <!--General element types and enums-->
    <xs:simpleType name="userType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="critic"/>
            <xs:enumeration value="user"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="currencyType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="EUR"/>
            <xs:enumeration value="USD"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="nameType">
        <xs:restriction base="xs:string">
            <xs:maxLength value="250"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="addressType">
        <xs:restriction base="xs:anyURI">
            <xs:maxLength value="500"/>
        </xs:restriction>
    </xs:simpleType>

    <!--Main structure types-->
    <xs:element name="games" type="gamesType"/>
    <xs:complexType name="amountType">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute type="currencyType" name="currency" use="required"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <xs:complexType name="offerType">
        <xs:sequence>
            <xs:element name="name" type="nameType"/>
            <xs:element name="address" type="addressType"/>
            <xs:element type="amountType" name="amount"/>
        </xs:sequence>
        <xs:attribute type="xs:boolean" name="limitedtime" use="optional"/>
    </xs:complexType>
    <xs:complexType name="gameType">
        <xs:sequence>
            <xs:element name="name" type="nameType"/>
            <xs:element name="developer" type="nameType"/>
            <xs:element name="publisher" type="nameType"/>
            <xs:element name="genre">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="Action role-playing"/>
                        <xs:enumeration value="Turn-based tactics"/>
                        <xs:enumeration value="Other available genres..."/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="release" type="xs:date"/>
            <xs:element type="platformsType" name="platforms"/>
            <xs:element type="reviewsType" name="reviews"/>
            <xs:element type="offersType" name="offers"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="platformsType">
        <xs:sequence>
            <xs:element name="platform" maxOccurs="30" minOccurs="1">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="Microsoft Windows"/>
                        <xs:enumeration value="PlayStation 4"/>
                        <xs:enumeration value="Xbox One"/>
                        <xs:enumeration value="Linux"/>
                        <xs:enumeration value="OS X"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="scoreType">
        <xs:simpleContent>
            <xs:extension base="xs:float">
                <xs:attribute type="xs:float" name="max" use="required"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <xs:complexType name="reviewType">
        <xs:sequence>
            <xs:element name="author" type="xs:string"/>
            <xs:element name="publisher" minOccurs="0" type="xs:string"/>
            <xs:element type="scoreType" name="score"/>
            <xs:element name="summary">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:maxLength value="1000"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="address" type="addressType"/>
        </xs:sequence>
        <xs:attribute type="userType" name="type" use="optional"/>
    </xs:complexType>
    <xs:complexType name="gamesType">
        <xs:sequence>
            <xs:element type="gameType" name="game" maxOccurs="unbounded" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="reviewsType">
        <xs:sequence>
            <xs:element type="reviewType" name="review" maxOccurs="unbounded" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="offersType">
        <xs:sequence>
            <xs:element type="offerType" name="offer" maxOccurs="unbounded" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
</xs:schema>


XSLT 1

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:asunik="http://wwww.asunik.ee">
    <xsl:template match="/">
        <html>
            <head>
            </head>
            <body>
                <xsl:for-each select="asunik:games/asunik:game">
                    <h2>
                        <xsl:value-of select="asunik:name"/>
                    </h2>
                    <table border="1">
                        <tr>
                            <th colspan="3">Critic reviews</th>
                        </tr>
                        <tr>
                            <th>Reviewer</th>
                            <th>Score</th>
                            <th>Max</th>
                        </tr>

                        <xsl:for-each select="asunik:reviews/asunik:review">
                            <xsl:if test="@type='critic'">
                                <tr>
                                    <td>
                                        <xsl:value-of select="asunik:author"/><xsl:text> </xsl:text><xsl:value-of select="asunik:publisher"/>
                                    </td>
                                    <td>
                                        <xsl:value-of select="asunik:score"/>
                                    </td>
                                    <td>
                                        <xsl:value-of select="asunik:score/@max"/>
                                    </td>
                                </tr>
                            </xsl:if>
                        </xsl:for-each>
                        <tr>
                            <th colspan="3">User reviews</th>
                        </tr>
                        <xsl:for-each select="asunik:reviews/asunik:review">
                            <xsl:if test="@type='user'">
                                <tr>
                                    <td>
                                        <xsl:value-of select="asunik:author"/><xsl:text> </xsl:text><xsl:value-of select="asunik:publisher"/>
                                    </td>
                                    <td>
                                        <xsl:value-of select="asunik:score"/>
                                    </td>
                                    <td>
                                        <xsl:value-of select="asunik:score/@max"/>
                                    </td>
                                </tr>
                            </xsl:if>
                        </xsl:for-each>
                    </table>
                </xsl:for-each>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

XSLT 2

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:asunik="http://wwww.asunik.ee">
    <xsl:template match="/">
        <games>
            <xsl:for-each select="asunik:games/asunik:game">
                <game>
                    <id>
                        <xsl:value-of select="position()"/>
                    </id>
                    <title>
                        <xsl:value-of select="asunik:name"/>
                    </title>
                    <percentScores>
                        <xsl:for-each select="asunik:reviews/asunik:review">
                            <percentScore>
                                <xsl:variable name="maxScore">
                                    <xsl:value-of select="asunik:score/@max"/>
                                </xsl:variable>
                                <xsl:value-of select="asunik:score div $maxScore * 100"/>
                            </percentScore>
                        </xsl:for-each>
                    </percentScores>
                </game>
            </xsl:for-each>
        </games>
    </xsl:template>
</xsl:stylesheet>

Veebiteenuse analüüs

Klientrakenduse analüüs

Retsensioonid

Klientrakenduse retsensioon meeskonnale Ticketer.

Veebiteenuse retsensioon meeskonnale Team_SPOT.